gin框架 路由拆分与注册
作者:互联网
★基本的路由注册
最基础的gin路由注册方式,适用于路由条目比较少的简单项目或者项目demo
package main import ( "fmt" "net/http" "github.com/gin-gonic/gin" ) func helloHander(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello www.topgoer.com!", }) } func main() { r := gin.Default() r.GET("/topgoer", helloHander) if err := r.Run(); err != nil { fmt.Printf("startup server failed,err:%v\n", err) } }
★路由拆分成单独文件或包
当项目的规模增大后就不太适合继续在项目的main.go文件中去实现路由注册相关逻辑了,我们会倾向于把路由部分的代码都拆分出来,形成一个单独的文件或包:
我们在routers.go文件中定义并注册路由信息:
package main import ( "net/http" "github.com/gin-gonic/gin" ) func helloHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello www.ckfuture.com!", }) } func setupRouter() *gin.Engine { r := gin.Default() r.GET("/ckfuture", helloHandler) return r }
此时main.go中调用上面定义好的setupRouter函数:
package main import "fmt" func main() { r := setupRouter() if err := r.Run(); err != nil { fmt.Printf("startup service failed,err:%v\n", err) } }
此时的目录结构:main.go和router.go在相同的文件夹下
把路由部分的代码单独拆分成包的话也是可以的,拆分后的目录结构如下:
routers/routers.go需要注意此时setupRouter需要改成首字母大写:
package routers
import ( "net/http" "github.com/gin-gonic/gin" ) func helloHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello www.ckfuture.com!", }) } func SetupRouter() *gin.Engine { r := gin.Default() r.GET("/ckfuture", helloHandler) return r }
main.go文件内容如下:
package main import ( "fmt" "src/main/src/go_code/project01/routers" ) func main() { r := routers.SetupRouter() if err := r.Run(); err != nil { fmt.Printf("startup service failed,err:%v\n", err) } }
★路由拆分成多个文件
当我们的业务规模继续膨胀,单独的一个routers文件或包已经满足不了我们的需求了,因为我们把所有的路由注册都写在一个SetupRouter函数中的话就会太复杂了。
我们可以分开定义多个路由文件,例如:
routers/shop.go中添加一个LoadShop的函数,将shop相关的路由注册到指定的路由器:
package routers import ( "net/http" "github.com/gin-gonic/gin" ) func LoadShop(e *gin.Engine) { e.GET("/hello", helloHandler) } func helloHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello www.topgoer.com", }) }
routers/blog.go中添加一个LoadBlog的函数,将blog相关的路由注册到指定的路由器:
package routers import ( "net/http" "github.com/gin-gonic/gin" ) func LoadBlog(e *gin.Engine) { e.GET("/post", postHandler) } func postHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello www.topgoer.com", }) }
在main函数中实现最终的注册逻辑如下:
package main import ( "fmt" "src/main/src/routers" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() routers.LoadBlog(r) routers.LoadShop(r) if err := r.Run(); err != nil { fmt.Printf("startup service failed, err:%v\n", err) } }
标签:func,err,routers,拆分,gin,main,路由 来源: https://www.cnblogs.com/ckfuture/p/14946422.html