Golang Gin-Gonic 将路由拆分为多个文件

huangapple go评论169阅读模式
英文:

Golang Gin-Gonic Split Routes into Multiple Files

问题

我正在寻找将我的routes.go文件拆分为多个文件的方法,以便每个路由组都在自己的包中。有人可以给我指出一个使用Gin框架实现这个的代码示例吗?

例如:

  1. package auth
  2. ...
  3. auth = route.Group("/auth"){
  4. auth.GET(...
  5. auth.POST(...
  6. }
  7. ...
  8. package users
  9. ...
  10. user = route.Group("/user"){
  11. user.GET(...
  12. user.POST(...
  13. }
  14. ...
  15. package main
  16. import (
  17. "auth"
  18. "users"
  19. )
  20. ...
  21. router = gin.Default()
  22. router.Register(auth.auth, users.user)
  23. router.Run()
英文:

I am looking to split my routes.go into multiple files so that each group is in its own package. Can someone point me to an example of some code where someone has done this with Gin?

i.e.

  1. package auth
  2. ...
  3. auth = route.Group("/auth"){
  4. auth.GET(...
  5. auth.POST(...
  6. }
  7. ...
  8. package users
  9. ...
  10. user = route.Group("/user"){
  11. user.GET(...
  12. user.POST(...
  13. }
  14. ...
  15. package main
  16. import (
  17. "auth"
  18. "users"
  19. )
  20. ...
  21. router = gin.Default()
  22. router.Register(auth.auth, users.user)
  23. router.Run()
  24. ...

答案1

得分: 35

这样做的方法是在每个包中创建一个以路由为参数的函数,然后将路由添加到参数中:

  1. package auth
  2. import "github.com/gin-gonic/gin"
  3. func Routes(route *gin.Engine) {
  4. auth := route.Group("/auth")
  5. {
  6. auth.GET(...)
  7. auth.POST(...)
  8. }
  9. }
  10. ...
  11. package users
  12. import "github.com/gin-gonic/gin"
  13. func Routes(route *gin.Engine) {
  14. user := route.Group("/user")
  15. {
  16. user.GET(...)
  17. user.POST(...)
  18. }
  19. }
  20. ...
  21. package main
  22. import (
  23. "github.com/username/package/sub/auth"
  24. "github.com/username/package/sub/users"
  25. "github.com/gin-gonic/gin"
  26. )
  27. ...
  28. router := gin.Default()
  29. auth.Routes(router) // 添加所有 auth 路由
  30. users.Routes(router) // 添加所有 user 路由
  31. router.Run()

这段代码的作用是在使用 Gin 框架的应用程序中添加路由。auth.Routes(router) 将添加所有 auth 包中定义的路由,users.Routes(router) 将添加所有 users 包中定义的路由。最后,通过 router.Run() 启动应用程序的服务器。

英文:

The way to do this is to create a function in each that takes a route as a parameter, and then adds the routes to the parameter:

  1. package auth
  2. import "...gin"
  3. func Routes(route *gin.Engine)
  4. auth := route.Group("/auth"){
  5. auth.GET(...
  6. auth.POST(...
  7. }
  8. ...
  9. package users
  10. import "...gin"
  11. func Routes(route *gin.Engine)
  12. user := route.Group("/user"){
  13. user.GET(...
  14. user.POST(...
  15. }
  16. ...
  17. package main
  18. import (
  19. "github.com/username/package/sub/auth"
  20. "github.com/username/package/sub/users"
  21. "github.com/gin-gonic/gin"
  22. )
  23. ...
  24. router := gin.Default()
  25. auth.Routes(router) //Added all auth routes
  26. user.Routes(router) //Added all user routes
  27. router.Run()
  28. ...

答案2

得分: 5

另一个例子,不同的视角... 主要组在主文件中,子组放置在一个名为groups的不同文件中

  1. package groups
  2. import "...gin"
  3. func Customer(g *gin.RouterGroup) {
  4. g.GET("/authorize", customer.Authorize)
  5. g.POST("/register", customer.Register)
  6. }
  7. ...
  8. package groups
  9. import "...gin"
  10. func Info(g *gin.RouterGroup) {
  11. g.GET("/car-color", controllers.CarColorsList)
  12. g.GET("/car-type", controllers.CarTypesList)
  13. g.GET("/car-manufacturer", controllers.CarManufacturersList)
  14. g.GET("/car-model", controllers.CarModelsList)
  15. }
  16. ...
  17. package main
  18. import (
  19. "github.com/gin-gonic/gin"
  20. "github.com/username/package/api/groups"
  21. )
  22. ...
  23. router := gin.Default()
  24. v1 := router.Group("/v1")
  25. {
  26. v1.Use(AuthMiddleware)
  27. groups.Info(v1.Group("/info"))
  28. groups.Customer(v1.Group("/customer"))
  29. }
  30. router.Run()
英文:

another example, different perspective... main group in main file, sub groups placed in different files in one directory groups

  1. package groups
  2. import "...gin"
  3. func Customer(g *gin.RouterGroup) {
  4. g.GET("/authorize", customer.Authorize)
  5. g.POST("/register", customer.Register)
  6. }
  7. ...
  8. package groups
  9. import "...gin"
  10. func Info(g *gin.RouterGroup) {
  11. g.GET("/car-color", controllers.CarColorsList)
  12. g.GET("/car-type", controllers.CarTypesList)
  13. g.GET("/car-manufacturer", controllers.CarManufacturersList)
  14. g.GET("/car-model", controllers.CarModelsList)
  15. }
  16. ...
  17. package main
  18. import (
  19. "github.com/gin-gonic/gin"
  20. "github.com/username/package/api/groups"
  21. )
  22. ...
  23. router := gin.Default()
  24. v1 := router.Group("/v1")
  25. {
  26. v1.Use(AuthMiddleware)
  27. groups.Info(v1.Group("/info"))
  28. groups.Customer(v1.Group("/customer"))
  29. }
  30. router.Run()
  31. ...

huangapple
  • 本文由 发表于 2017年3月23日 12:25:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/42967235.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定