基本信息
文件名称:Golang中HTTP路由设计的使用与实现.docx
文件大小:20.47 KB
总页数:12 页
更新时间:2025-05-22
总字数:约9.32千字
文档摘要

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