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

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

在 Go 結(jié)構(gòu)體中獲取reflect.Ptr 類(lèi)型到字段

在 Go 結(jié)構(gòu)體中獲取reflect.Ptr 類(lèi)型到字段

Go
尚方寶劍之說(shuō) 2021-08-23 15:37:34
我正在嘗試將指向結(jié)構(gòu)中字段的指針的可變參數(shù)列表傳遞給第三方包。該包接受一個(gè)可變參數(shù)interface{}列表 ( func Persist(...interface) error ),其中每個(gè)接口值都是一個(gè)指向變量的指針。我創(chuàng)建了一個(gè)函數(shù)來(lái)模擬第三方庫(kù)的方式并打印出指針的類(lèi)型和種類(lèi)(下面稱(chēng)為 mockFunction)。當(dāng)我以非可變參數(shù)的方式將結(jié)構(gòu)變量的地址傳遞給它時(shí),它們?cè)谑褂梅瓷湔{(diào)用的模擬函數(shù)中具有它們的原始類(lèi)型和值。但是,當(dāng)我使用擴(kuò)展以可變參數(shù)方式傳遞它們時(shí),它們具有Type: Type: reflect.Value和Kind: struct。第三方包不知道如何以這種形式處理它們。我想找出一種方法來(lái)調(diào)用帶有接口切片的第三方包{}(例如inv := make([]interface{}, 3),Persist(inv...)如果可能的話(huà),在調(diào)用中使用可變參數(shù)擴(kuò)展。下面是帶有 Go Playground 鏈接的代碼:package mainimport (  "fmt"  "reflect")type Investment struct {  Price  float64  Symbol string  Rating int64}func main() {  inv := Investment{Price: 534.432, Symbol: "GBG", Rating: 4}  s := reflect.ValueOf(&inv).Elem()  variableParms := make([]interface{}, s.NumField())  for i := 0; i < s.NumField(); i++ {    variableParms[i] = s.Field(i).Addr()  }  // non-variadic call  mockFunction(&inv.Price, &inv.Symbol, &inv.Rating)  //variadic call  mockFunction(variableParms...)}func mockFunction(values ...interface{}) {  for i, value := range values {    rv := reflect.ValueOf(value)    fmt.Printf("value %d has Type: %s and Kind %s\n", i, rv.Type(), rv.Kind())  }}當(dāng)我使用非可變參數(shù)運(yùn)行它時(shí),對(duì) mockFunction 的調(diào)用返回本機(jī)類(lèi)型和種類(lèi),第三方包可以很好地處理它們:value 0 has Type: *float64 and Kind ptrvalue 1 has Type: *string and Kind ptrvalue 2 has Type: *int64 and Kind ptr當(dāng)我使用可變參數(shù)運(yùn)行它時(shí),值不同,第三方包不知道如何處理這些類(lèi)型:value 0 has Type: reflect.Value and Kind structvalue 1 has Type: reflect.Value and Kind structvalue 2 has Type: reflect.Value and Kind struct有什么方法可以構(gòu)造切片定義并調(diào)用切片中的內(nèi)容,以便它可以進(jìn)行可變參數(shù)擴(kuò)展,并且看起來(lái)像以非可變參數(shù)方式將指針傳遞給結(jié)構(gòu)字段?
查看完整描述

2 回答

?
慕虎7371278

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

Addr()返回字段指針的反射。對(duì)該值調(diào)用Ptr()以獲取實(shí)際指針作為接口{}。

variableParms[i] = s.Field(i).Addr().Ptr()

playground


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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