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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取指向在 golang 中使用反射創(chuàng)建的結(jié)構(gòu)的指針

獲取指向在 golang 中使用反射創(chuàng)建的結(jié)構(gòu)的指針

Go
肥皂起泡泡 2023-02-21 16:30:23
我有以下代碼模擬我正在處理的代碼的結(jié)構(gòu)。主要思想是該ListOf函數(shù)接收一些結(jié)構(gòu)的數(shù)組,并用使用反射創(chuàng)建的元素填充它。結(jié)構(gòu)的類型未知,因此它必須與“任何”類型一起使用,這就是參數(shù)list作為interface{}. 這部分似乎在工作:創(chuàng)建元素并將其附加到數(shù)組。在附加到數(shù)組之前,必須將元素傳遞給SetValue需要指向結(jié)構(gòu)的指針的函數(shù),以便修改它接收的結(jié)構(gòu)。在下面的代碼中,我正在模擬這個函數(shù),它的內(nèi)部邏輯是不相關(guān)的,因為 我不控制這個函數(shù)。我無法更改它,而且據(jù)我測試,如果此函數(shù)接收到指向結(jié)構(gòu)的指針,它會按預(yù)期工作。但是,我一直無法找到一種方法將指向新創(chuàng)建的結(jié)構(gòu)的指針傳遞給函數(shù)SetValue。當(dāng)我運行下面的代碼時,出現(xiàn)以下錯誤:恐慌:接口轉(zhuǎn)換:接口 {} 是 main.MyStruct,而不是 *main.MyStruct我的問題是,如何修改才能ListOf將 a 傳遞*main.MyStruct給SetValue函數(shù)。顯然我在這里遺漏了一些簡單的東西。這是代碼。您可以在 Go Playground 嘗試一下。提前致謝。package mainimport (         "fmt"         "reflect")type MyStruct struct {     Metadata struct {        Name string    }}// Expects a pointer to an struct and modifies itfunc SetValue(obj interface{}) {    // This code mocks the logic that modifies the generic objects    // It only shows that I need a pointer in order to modify obj    // I don't control this logic.    s := obj.(*MyStruct)    s.Metadata.Name = "name"}func ListOf(list interface{}) {    // type of the elements of the list (main.MyStruct)    e := reflect.TypeOf(list).Elem().Elem()    // new value of type main.MyStruct    v := reflect.New(e)    // Call SetName, here is where I need *main.MyStruct    SetValue(v.Elem().Interface())    // value of list used below    l := reflect.ValueOf(list).Elem()    // append new value to list    l.Set(reflect.Append(l, v.Elem()))}func main() {    list := []MyStruct{}    ListOf(&list)    fmt.Printf("%v", list)}
查看完整描述

1 回答

?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

New返回一個帶有 的值*main.MyStruct。將該值傳遞給 SetValue:

v := reflect.New(e)
SetValue(v.Interface())

https://go.dev/play/p/vJwbfGj7YZF


查看完整回答
反對 回復(fù) 2023-02-21
  • 1 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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