我在下面的树中写了一个类似于 display 的结构。
.
├── README.md
├── db
│ └── db.go
├── go.mod
├── go.sum
├── handler
│ ├── category.go
│ ├── handler.go
│ └── users.go
├── main.go
├── model
│ ├── category.go
│ ├── model.go
│ └── users.go
└── route
├── category.go // init() ❌ error to using package vars
├── route.go // init() writing package vars
└── users.go // init() ✅ no error to using package vars
包中除同名文件(route/route.go、handler/handler.go、...)之外的所有文件都是自动生成的。对于这些文件来扩展包变量,我使用 golang 的func init(){}ex:
路线/route.go
package route
import (
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
var (
// public routes
e *echo.Echo = echo.New()
// restricted routes
r *echo.Group = e.Group("/restricted")
)
func init() {
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{"http://localhost:3000"},
AllowMethods: []string{echo.GET, echo.PUT, echo.POST, echo.DELETE, echo.OPTIONS},
AllowHeaders: []string{echo.HeaderAuthorization, echo.HeaderContentType},
}))
e.Use(middleware.Recover())
r.Use(middleware.JWT([]byte("secret")))
}
路线/类别.go
package route
import (
"github.com/username/project/handler"
)
func init() {
r.GET("/category", handler.ListCategory)
r.POST("/category/add", handler.CreateCategory)
r.GET("/category/:id", handler.ReadCategory)
r.PUT("/category/edit/:id", handler.UpdateCategory)
r.DELETE("/category/:id", handler.DeleteCategory)
}
正如您已经了解的那样, category.goinit()在 router.go 之前开始init(),这在此处进行了描述:Go 包初始化。
在编写了一个漂亮的程序后,它会自动编写类似route/category.go. 我意识到要解决这个问题,我必须重命名router/router.go为router/0router.go (它有效),以便它仍然位于支柱的顶部,但这不是一个好方法。
对这棵树和 golang 的使用有什么建议ini()吗?
慕运维8079593
相关分类