gin框架路由组源码剖析
2022/5/23 1:05:48
本文主要是介绍gin框架路由组源码剖析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" "reflect" "runtime" ) func main() { r := gin.New() // 1. 添加中间件 r.Use(gin.Logger(), gin.Recovery()) // 2. 405支持 r.HandleMethodNotAllowed = true // 3. 自定义404页面 r.NoRoute(myNoRoute) // 4. 自定义405页面 r.NoMethod(myNoMethod) // 405页面需要搭配405支持一起使用 // 5. 创建路由组 user := r.Group("user") // 6. 获取路由组的基本路径 fmt.Println(user.BasePath()) // 7. 打印路由组的处理程程序链 for _, handler := range user.Handlers{ fmt.Println(runtime.FuncForPC(reflect.ValueOf(handler).Pointer()).Name()) } // 8. 注册路由 user.Handle("GET", "/register", func(context *gin.Context) { context.String(200, "这是注册页面") }) // 9. 大杀器,不建议使用(注册一个支持所有方法的路由) // Any 注册一个匹配所有 HTTP 方法的路由。 GET、POST、PUT、PATCH、HEAD、OPTIONS、DELETE、CONNECT、TRACE user.Any("/any", func(context *gin.Context) { context.String(200, "这是一个支持任何方法的路由") }) // 10. 注册单个文件路由 //user.StaticFile("/01.png", "http_server/file/01.png") // 11. 注册文件目录路由, 不提供文件列表 //user.Static("/static", "http_server/file/") // 12. 注册文件目录路由,可以提供文件列表, true代表提供文件列表 user.StaticFS("/static", gin.Dir("http_server/file/", true)) user.GET("/login/:name", login) _ = r.Run() } func myNoMethod(context *gin.Context) { context.String(http.StatusMethodNotAllowed, "您请求的方法不允许") } func myNoRoute(context *gin.Context) { context.String(http.StatusNotFound, "您要访问的页面不存在") } func login(context *gin.Context) { context.String(200, "OK") } /* routegroup.go中几个非常重要的方法 方法1:合并处理程序链 func (group *RouterGroup) combineHandlers(handlers HandlersChain) HandlersChain { finalSize := len(group.Handlers) + len(handlers) if finalSize >= int(abortIndex) { // abortIndex = 32 panic("too many handlers") } mergedHandlers := make(HandlersChain, finalSize) copy(mergedHandlers, group.Handlers) copy(mergedHandlers[len(group.Handlers):], handlers) return mergedHandlers } 方法2:拼接绝对路径 func (group *RouterGroup) calculateAbsolutePath(relativePath string) string { return joinPaths(group.basePath, relativePath) } 方法3:返回Engine或RouterGroup func (group *RouterGroup) returnObj() IRoutes { if group.root { return group.engine } return group } */
这篇关于gin框架路由组源码剖析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南