【发布时间】:2019-05-28 07:04:51
【问题描述】:
我有一个关于使用 Golang 输入导出包中的模块的问题。
例如,我想在包controllers中导出UserCtrl,而包api可以在导入包UserCtrl时使用UserCtrl。
我还想用打字导出UserCtrl,这意味着在api,我可以调用命名方法,例如UserCtrl.findOne(),或UserCtrl.findAll() ,不要使用map[string]interface{}。
所以我在 Golang 中创建了新类型 UserCtrlType 作为结构
package controllers
import (
"github.com/gin-gonic/gin"
)
// UserCtrlType : Type controller for User
type UserCtrlType struct {
FindAll gin.HandlerFunc
FindOneByID gin.HandlerFunc
FindOneByUsername gin.HandlerFunc
}
// UserCtrl : Controller for User
var UserCtrl = UserCtrlType{
findAll,
findOneByID,
findOneByUsername,
}
func findAll(ctx *gin.Context) {
}
func findOneByID(ctx *gin.Context) {
}
func findOneByUsername(ctx *gin.Context) {
}
在包api中,我导入controller并使用:
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)
}
我正在使用Gin,因此结构UserCtrlType 与gin.HandlerFunc 类型重复了很多次。
有没有其他方法可以解决我的问题,可以导出UserCtrl(类型化),减少重复类型gin.HandlerFunc声明。
当我在做 Node.JS 时,我发现导出模块非常简单。我们可以在 Golang 中简化这个问题吗?
【问题讨论】:
-
“UserCtrlType 与 gin.HandlerFunc 类型重复多次”是什么意思?你想让“UserCtrl”成为一个基本结构,并且在 api 包中“扩展”它吗?
-
@DharmaSaputra,不,我想用命名方法导出
UserCtrl,这意味着可以使用UserCtrl.findAll()示例。但是UserCtrlType与gin.HandlerFunc重复多次。有没有其他方法可以减少它或为我的目的使用其他方法? -
不用太费劲,我觉得可以重复输入gin.HandlerFunc。
-
我找到了问题的答案。 Tnx