创建路由模块 Go/Echo Rest API
Create Routing Modules Go/Echo RestAPI
我刚开始学习 Go,想创建自己的 REST API。
问题很简单:
我想将 api 的路由放在不同的文件中,例如:routes/users.go 然后我将其包含在 "main" 函数中并注册这些路由。
Echo/Go 中有大量 restAPI 的示例,但它们在 main() 函数中都有路由。
我检查了一些 examples/github 初学者工具包,但似乎找不到我喜欢的解决方案。
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
responseJSON := &JSResp{Msg: "Hello World!"}
return c.JSON(http.StatusOK, responseJSON)
})
//I want to get rid of this
e.GET("users", UserController.CreateUser)
e.POST("users", UserController.UpdateUser)
e.DELETE("users", UserController.DeleteUser)
//would like something like
// UserRoutes.initRoutes(e)
e.Logger.Fatal(e.Start(":1323"))
}
//UserController.go
//CreateUser
func CreateUser(c echo.Context) error {
responseJSON := &JSResp{Msg: "Create User!"}
return c.JSON(http.StatusOK, responseJSON)
}
//UserRoutes.go
func initRoutes(e) { //this is probably e* echo or something like that
//UserController is a package in this case that exports the CreateUser function
e.GET("users", UserController.CreateUser)
return e;
}
有没有简单的方法来做这个?来自 node.js,当然还有一些语法错误,会解决它们,但我目前正在为我的代码架构而苦苦挣扎。
I want to have the routes of my api in a different file for example:
routes/users.go that then I include in the "main" function and
register those routes.
这是可能的,只需让 routes
包中的文件声明采用 *echo.Echo
实例的函数并让它们注册处理程序。
// routes/users.go
func InitUserRoutes(e *echo.Echo) {
e.GET("users", UserController.CreateUser)
e.POST("users", UserController.UpdateUser)
e.DELETE("users", UserController.DeleteUser)
}
// routes/posts.go
func InitPostRoutes(e *echo.Echo) {
e.GET("posts", PostController.CreatePost)
e.POST("posts", PostController.UpdatePost)
e.DELETE("posts", PostController.DeletePost)
}
然后在 main.go
import (
"github.com/whatever/echo"
"package/path/to/routes"
)
func main() {
e := echo.New()
routes.InitUserRoutes(e)
routes.InitPostRoutes(e)
// ...
}
请注意,InitXxx
函数需要以大写字母开头,而您的 initRoutes
示例的首字母为小写。这是因为首字母小写的标识符是 unexported,这使得它们无法从自己的包外部访问。换句话说,为了能够引用导入的标识符,您必须通过以大写字母开头来导出它。
我刚开始学习 Go,想创建自己的 REST API。
问题很简单: 我想将 api 的路由放在不同的文件中,例如:routes/users.go 然后我将其包含在 "main" 函数中并注册这些路由。
Echo/Go 中有大量 restAPI 的示例,但它们在 main() 函数中都有路由。
我检查了一些 examples/github 初学者工具包,但似乎找不到我喜欢的解决方案。
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
responseJSON := &JSResp{Msg: "Hello World!"}
return c.JSON(http.StatusOK, responseJSON)
})
//I want to get rid of this
e.GET("users", UserController.CreateUser)
e.POST("users", UserController.UpdateUser)
e.DELETE("users", UserController.DeleteUser)
//would like something like
// UserRoutes.initRoutes(e)
e.Logger.Fatal(e.Start(":1323"))
}
//UserController.go
//CreateUser
func CreateUser(c echo.Context) error {
responseJSON := &JSResp{Msg: "Create User!"}
return c.JSON(http.StatusOK, responseJSON)
}
//UserRoutes.go
func initRoutes(e) { //this is probably e* echo or something like that
//UserController is a package in this case that exports the CreateUser function
e.GET("users", UserController.CreateUser)
return e;
}
有没有简单的方法来做这个?来自 node.js,当然还有一些语法错误,会解决它们,但我目前正在为我的代码架构而苦苦挣扎。
I want to have the routes of my api in a different file for example: routes/users.go that then I include in the "main" function and register those routes.
这是可能的,只需让 routes
包中的文件声明采用 *echo.Echo
实例的函数并让它们注册处理程序。
// routes/users.go
func InitUserRoutes(e *echo.Echo) {
e.GET("users", UserController.CreateUser)
e.POST("users", UserController.UpdateUser)
e.DELETE("users", UserController.DeleteUser)
}
// routes/posts.go
func InitPostRoutes(e *echo.Echo) {
e.GET("posts", PostController.CreatePost)
e.POST("posts", PostController.UpdatePost)
e.DELETE("posts", PostController.DeletePost)
}
然后在 main.go
import (
"github.com/whatever/echo"
"package/path/to/routes"
)
func main() {
e := echo.New()
routes.InitUserRoutes(e)
routes.InitPostRoutes(e)
// ...
}
请注意,InitXxx
函数需要以大写字母开头,而您的 initRoutes
示例的首字母为小写。这是因为首字母小写的标识符是 unexported,这使得它们无法从自己的包外部访问。换句话说,为了能够引用导入的标识符,您必须通过以大写字母开头来导出它。