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

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

Golang Gorm 動(dòng)態(tài)目標(biāo)結(jié)構(gòu)

Golang Gorm 動(dòng)態(tài)目標(biāo)結(jié)構(gòu)

Go
qq_笑_17 2022-06-01 11:29:41
我想編寫一個(gè)函數(shù),用GORM檢索數(shù)據(jù)庫中的記錄,其中目標(biāo)結(jié)構(gòu)是動(dòng)態(tài)的。像這樣的東西:type User struct {  ID    uint  Email string}type BigUser struct {  ID       uint  Username string  Role     string}func GetRecord(db *gorm.DB, u SomeUserInterfaceTypeOrSomething) {  db.Find(&u)}GetRecord(db, User{})GetRecord(db, BigUser{})因此,如果我傳遞一個(gè)User結(jié)構(gòu)變量,我只會(huì)得到 ID 和電子郵件,如果我傳遞一個(gè)BigUser結(jié)構(gòu)變量,我會(huì)得到所有數(shù)據(jù)庫字段(例如)。我需要這個(gè),因?yàn)镚etRecord它將在一個(gè)庫中,并且我希望將使用該庫的人可以傳遞一個(gè)自定義結(jié)構(gòu)來僅檢索他想要的字段。我不知道如何實(shí)現(xiàn)這一點(diǎn),任何建議或最佳實(shí)踐?我是 Golang 的新手:D
查看完整描述

2 回答

?
眼眸繁星

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

將指針傳遞給接口幾乎總是(如果不是總是)錯(cuò)誤的。即傳遞給你的函數(shù)的參數(shù)應(yīng)該已經(jīng)是一個(gè)指針。json.Unamrshal考慮到這一點(diǎn),您可以使用與或就此而言使用的相同方法(*gorm.DB).Find,即接受一個(gè)空接口并將結(jié)果解碼為該接口。并使用文檔通知用戶傳入的值必須是非零指針,否則代碼將失敗。


func GetRecord(db *gorm.DB, u interface{}) {

    db.Find(u) // u must already be a pointer, therefore don't do &u here

}


var u User{}

GetRecord(db, &u) // pass a pointer here


bu := new(BigUser) // new returns a pointer

GetRecord(db, bu) // bu is a pointer already, no need for &bu here


查看完整回答
反對 回復(fù) 2022-06-01
?
湖上湖

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

要傳遞structureas UserInterface,您需要確保您的期望結(jié)構(gòu)實(shí)現(xiàn)所有接口方法。


示例代碼

package main


import "fmt"


type User struct {

    ID    uint

    Email string

}


func (user *User) GetRecord() interface{} {

    // get info from database here

    return &User{

        ID:    user.ID,

        Email: user.Email,

    }

}


type BigUser struct {

    ID       uint

    Username string

    Role     string

}


func (user *BigUser) GetRecord() interface{} {

    // get info from database here

    return &BigUser{

        ID:       user.ID,

        Username: user.Username,

        Role:     user.Role,

    }

}


// While declaring an interface,

// make sure that your desire structures have all those interface methods.

type UserInterface interface {

    GetRecord() interface{}

}


// Function to print the values

func printValues(u UserInterface) {

    fmt.Println(u.GetRecord())

}


func main() {

    var x UserInterface


    x = &User{

        ID:    1,

        Email: "abc@gmail.com",

    }

    printValues(x)


    x = &BigUser{

        ID:       2,

        Username: "YouKnowWhoIam",

        Role:     "ADMIN",

    }

    printValues(x)

}

輸出

&{1 abc@gmail.com}

&{2 YouKnowWhoIam ADMIN}


查看完整回答
反對 回復(fù) 2022-06-01
  • 2 回答
  • 0 關(guān)注
  • 169 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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