gpt4 book ai didi

go - 如何缩短 Golang 中具有相同类型属性的结构声明?

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:33 24 4
gpt4 key购买 nike

我有一个关于在 Golang 中输入一个包中的模块的问题。

例如,我想在controllers包中导出UserCtrl,而api包可以使用UserCtrl当导入包 controllers 时。

我还想通过键入导出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 ,因此结构 UserCtrlTypegin.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 包,这应该是一种特殊情况),则永远不能将其称为 map 。

关于go - 如何缩短 Golang 中具有相同类型属性的结构声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com