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 關注
- 154 瀏覽
添加回答
舉報