第
Golang中HTTP路由设计的使用与实现
目录Golang之HTTP路由设计动手编写自己的路由framework/core.goframework/group.go如何实现动态路由改造一下core.go验证
Golang之HTTP路由设计
为什么要设计路由规则,路由规则是HTTP的请求按照一定的规则,匹配查找到对应的控制器并传递执行的逻辑!
自己编写路由的话需要注意一下一共有几种路由!
一种是支持原生的restful四种类型的访问方法!Get,Post,Delete,Put需要支持自定义的路径,也就是静态路由批量通用前缀,也就是下面我们将讲到的group动态路由匹配!
也就是像这样我们在route.go去注册
funcregisterRouter(core*framework.Core){
print(111)
//设置控制器
core.Get(/foo,FooController)
core.Get(/user/login,UserLoginController)
subjectApi:=core.Group(/subject)
//restful路由,根据请求类型区分了开,:id为动态路由
subjectApi.Get(/list/all,SubjectListController)
subjectApi.Post(/add,SubjectListController)
subjectApi.Delete(/:id,SubjectListController)
subjectApi.Put(/:id,SubjectListController)
subjectApi.Get(/:id,SubjectListController)
}
动手编写自己的路由
在上一节中我们编写了自己的请求处理器,对应在里面加入我们的路由规则就好了!
framework/core.go
packageframework
import(
net/http
strings
const(
GET=GET
PUT=PUT
DELETE=DELETE
POST=POST
//map[string]map[string]ControllerHandler前面存请求类型后面是路径对应执行方法
typeCorestruct{
routermap[string]map[string]ControllerHandler
func(cCore)ServeHTTP(writerhttp.ResponseWriter,request*http.Request){
ctx:=NewContext(request,writer)
router:=c.FindRouteByRequest(request)
ifrouter==nil{
ctx.Json(404,routernotfound)
return
iferr:=router(ctx);err!=nil{
ctx.Json(500,serverInterval)
return
//http.DefaultServeMux.ServeHTTP(writer,request)
funcNewCore()*Core{
getRouter:=map[string]ControllerHandler{}
postRouter:=map[string]ControllerHandler{}
putRouter:=map[string]ControllerHandler{}
deleteRouter:=map[string]ControllerHandler{}
core:=Core{
router:make(map[string]map[string]ControllerHandler,0),
//初始化好四种类型的路由map
core.router[GET]=getRouter
core.router[POST]=postRouter
core.router[PUT]=putRouter
core.router[DELETE]=deleteRouter
returncore
//注册Get方法
func(c*Core)Get(patternstring,handlerControll