第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何縮短 Golang 中具有相同類型屬性的結(jié)構(gòu)聲明?

如何縮短 Golang 中具有相同類型屬性的結(jié)構(gòu)聲明?

Go
倚天杖 2023-05-22 17:39:14
我有一個(gè)關(guān)于在 Golang 中輸入一個(gè)包中的模塊的問(wèn)題。例如,我想U(xiǎn)serCtrl在 package 中導(dǎo)出controllers,并且 package可以在 import package 時(shí)api使用。UserCtrlcontrollers我還想U(xiǎn)serCtrl通過(guò)鍵入導(dǎo)出,這意味著api我可以調(diào)用命名方法,例如UserCtrl.findOne(),或者UserCtrl.findAll()不使用map[string]interface{}。所以我UserCtrlType在 Golang 中創(chuàng)建了新類型作為結(jié)構(gòu)package controllersimport (    "github.com/gin-gonic/gin")// UserCtrlType : Type controller for Usertype UserCtrlType struct {    FindAll           gin.HandlerFunc    FindOneByID       gin.HandlerFunc    FindOneByUsername gin.HandlerFunc}// UserCtrl : Controller for Uservar UserCtrl = UserCtrlType{    findAll,    findOneByID,    findOneByUsername,}func findAll(ctx *gin.Context) {}func findOneByID(ctx *gin.Context) {}func findOneByUsername(ctx *gin.Context) {}在 package 中api,我導(dǎo)入controller并使用:package apiimport (    Controllers "github.com/huynhsamha/gin-go-app/controllers"    "github.com/gin-gonic/gin")var userCtrl = Controllers.UserCtrlfunc setUpUserRoutes(router *gin.RouterGroup) {    router.GET("/", userCtrl.FindAll)    router.GET("/n/:username", userCtrl.FindOneByUsername)    router.GET("/d/:id", userCtrl.FindOneByID)}我正在使用Gin,因此 structUserCtrlType使用 type 重復(fù)了很多次gin.HandlerFunc。有沒(méi)有其他方法可以解決我的問(wèn)題,可以導(dǎo)出UserCtrl(鍵入)并減少重復(fù)的類型gin.HandlerFunc聲明。當(dāng)我在 Node.JS 上工作時(shí),我發(fā)現(xiàn)導(dǎo)出模塊非常簡(jiǎn)單。我們可以在 Golang 中簡(jiǎn)化這個(gè)問(wèn)題嗎?
查看完整描述

2 回答

?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

通常在 Go 中,您不會(huì)創(chuàng)建一個(gè)結(jié)構(gòu)來(lái)包裝一堆這樣的函數(shù)聲明;您只需直接導(dǎo)出功能即可。


package controllers

import "github.com/gin-gonic/gin"

func FindAll(ctx *gin.Context) { ... }

router.GET("/", controllers.FindAll)

如果你真的想要一個(gè)包含它們作為變量函數(shù)引用的結(jié)構(gòu),可以使用不重復(fù)類型的語(yǔ)法:


type UserCtrlType struct {

    FindAll, FindOneByID, FindOneByUsername gin.HandlerFunc

}

一般來(lái)說(shuō),在 Go 中你可能會(huì)發(fā)現(xiàn)這是你重復(fù)代碼中最少的(if err != nil { return err }出現(xiàn)很多)?!按蜃帧痹?Go 中并不是一個(gè)特殊的概念;reflect如果一個(gè)對(duì)象不是一個(gè)對(duì)象(不通過(guò)包,這應(yīng)該是一種特殊情況),則永遠(yuǎn)不能將其稱為地圖。


查看完整回答
反對(duì) 回復(fù) 2023-05-22
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

我找到了我的問(wèn)題的答案。我認(rèn)為由于我對(duì) Golang 的了解有限,我之前沒(méi)有想到更簡(jiǎn)單的方法來(lái)解決我的問(wèn)題。


這是我對(duì)我的問(wèn)題的回答:


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)

}


查看完整回答
反對(duì) 回復(fù) 2023-05-22
  • 2 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)