2 回答
TA贡献1883条经验 获得超3个赞
通常在 Go 中,您不会创建一个结构来包装一堆这样的函数声明;您只需直接导出功能即可。
package controllers
import "github.com/gin-gonic/gin"
func FindAll(ctx *gin.Context) { ... }
router.GET("/", controllers.FindAll)
如果你真的想要一个包含它们作为变量函数引用的结构,可以使用不重复类型的语法:
type UserCtrlType struct {
FindAll, FindOneByID, FindOneByUsername gin.HandlerFunc
}
一般来说,在 Go 中你可能会发现这是你重复代码中最少的(if err != nil { return err }出现很多)。“打字”在 Go 中并不是一个特殊的概念;reflect如果一个对象不是一个对象(不通过包,这应该是一种特殊情况),则永远不能将其称为地图。
TA贡献1851条经验 获得超5个赞
我找到了我的问题的答案。我认为由于我对 Golang 的了解有限,我之前没有想到更简单的方法来解决我的问题。
这是我对我的问题的回答:
package controllers
import "github.com/gin-gonic/gin"
// UserCtrl : Controller for User
type UserCtrl struct{}
// FindAll :
func (ctrl UserCtrl) FindAll(ctx *gin.Context) {
}
// FindOneByID :
func (ctrl UserCtrl) FindOneByID(ctx *gin.Context) {
}
// FindOneByUsername :
func (ctrl UserCtrl) FindOneByUsername(ctx *gin.Context) {
}
并在包装中api
package api
import (
Controllers "github.com/huynhsamha/gin-go-app/controllers"
"github.com/gin-gonic/gin"
)
var userCtrl = Controllers.UserCtrl{}
func setUpUserRoutes(router *gin.RouterGroup) {
router.GET("/", userCtrl.FindAll)
router.GET("/n/:username", userCtrl.FindOneByUsername)
router.GET("/d/:id", userCtrl.FindOneByID)
}
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报