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

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

將結(jié)構(gòu)復(fù)合傳遞到函數(shù)中

將結(jié)構(gòu)復(fù)合傳遞到函數(shù)中

Go
qq_花開花謝_0 2022-08-01 15:28:31
需要一些幫助來理解golang。來自使用基類C++這是微不足道的。在 Go 中,使用結(jié)構(gòu)組合,它工作正常,直到我需要具有采用“Base”結(jié)構(gòu)的功能。我知道它不是真正的基類,但是當(dāng)涉及到從派生的基類的字段分配值時(shí),它工作正常。但是我不能傳遞到一個(gè)采取.DogWolfpackage main    import "fmt"    type Wolf struct {    ID     string    Schema int}    type Dog struct {    Wolf}    type Dingo struct {    Wolf}    func processWolf(wolf Wolf) {    fmt.Println(wolf.ID, wolf.Schema)}    func main() {    porthos := Dog{}    porthos.ID = "Porthos"  // works fine able to set field of Wolf    porthos.Schema = 1      // works fine        aussie := Dingo{}    aussie.ID = "Aussie"  // works fine    aussie.Schema = 1     // works fine        fmt.Println(porthos.ID, porthos.Schema)    fmt.Println(aussie.ID, aussie.Schema)    processWolf(porthos) << fails here    processWolf(aussie) << fails here    }
查看完整描述

2 回答

?
炎炎設(shè)計(jì)

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

該函數(shù)采用參數(shù),因此您必須傳遞 .由于這兩種結(jié)構(gòu)都嵌入在其中,因此您可以執(zhí)行以下操作:processWolfWolfWolfWolf


processWolf(porthos.Wolf) 

processWolf(aussie.Wolf) 

因?yàn)楫?dāng)你嵌入到 ,得到所有的方法都有,加上有一個(gè)名為 的成員。WolfDogDogWolfDogWolf


查看完整回答
反對(duì) 回復(fù) 2022-08-01
?
ITMISS

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

當(dāng)我最初發(fā)布問題時(shí),我試圖簡(jiǎn)化問題陳述,也許太多了,Serdar先生很好心地回答了這個(gè)問題,但沒有幫助我的問題。在深入研究了gophers的lang之后,我遇到了一個(gè)使用interface{}來解決這個(gè)問題的解決方案。我改編了我的mongo代碼,它正在工作,盡管我可能會(huì)說它看起來不像其他語言傳遞引用那么簡(jiǎn)單。


// FindAll retrieves one object from the collection

func FindAll(collection *mongo.Collection, filter bson.M, resultSet interface{}) error {


    ctx, cancel := context.WithTimeout(context.Background(), 30*time.Seconds)

    defer cancel()


    cursor, err := collection.Find(ctx, filter)

    if err != nil {

        return err

    }


    defer cursor.Close(ctx)


    objects := reflect.ValueOf(resultSet).Elem()


    for cursor.Next(ctx) {


        obj := reflect.New(objects.Type().Elem())


        err = cursor.Decode(obj.Interface())


        if err != nil {

            log.Panicln("FindAll:", err.Error())

            // assuming that an interface is out of alignment and need to know ASAP.

        }


        objects = reflect.Append(objects, obj.Elem())

    }


    reflect.ValueOf(resultSet).Elem().Set(objects)


    return nil

}

然后調(diào)用它使用


    var dogs []Dog

    if err := database.FindAll(houseCollection, bson.M{}, &dogs); err != nil {

        return nil, err

    }


    println(dogs)

    var dingos []Dingo

    if err := database.FindAll(houseCollection, bson.M{}, &dingos); err != nil {

        return nil, err

    }


    println(dingos)

沒有狗和野狗必須與基類相關(guān)。但我真的覺得Golang的設(shè)計(jì)師做了一些奇怪的轉(zhuǎn)折,我還沒有理解。雖然有樂趣追逐地鼠。


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

添加回答

舉報(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)