go - 如何在 Golang 中缩短具有相同类型属性的结构声明?
问题描述
我有一个关于使用 Golang 输入导出包中的模块的问题。
例如,我想UserCtrl
在 package中导出controllers
,并且 packageapi
可以UserCtrl
在 import package 时使用controllers
。
另外我想UserCtrl
用打字导出,这意味着在里面api
,我可以调用命名方法,例如UserCtrl.findOne()
,或者UserCtrl.findAll()
,不使用map[string]interface{}
。
所以我UserCtrlType
在 Golang 中创建了新类型作为结构
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) {
}
在 package 中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
与 type 重复了很多次gin.HandlerFunc
。
有没有其他方法可以解决我的问题,可以导出UserCtrl
(键入)并减少重复的类型gin.HandlerFunc
声明。
当我在处理 Node.JS 时,我发现导出模块非常简单。我们可以在 Golang 中简化这个问题吗?
解决方案
通常在 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
包,这应该是一种特殊情况)。
推荐阅读
- mongodb - mongodb社区服务器是否支持两阶段提交?
- c# - 带有多个参数的 C# Launch 应用程序似乎不适用于文本框
- c# - 如何使用字符串变量c#中的给定路径获取JSON对象
- mysql - 添加并返回当前日期 NodeJs
- java - 扫描发现在 android 应用程序中不起作用
- oracle - 完全下载 APEX 站点
- mysql - Micronaut:无法连接 MySQL 数据库并使用 Hibernate 使用表创建模式
- testng - 使用 TestNg 或 Cucumber 对 RestAssured 进行多线程执行
- javascript - Javascript解析excel文件并创建笛卡尔积
- python - Python3:在另一个线程打开输入时在新行上打印