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

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

當(dāng)傳入 reflect.New(Type) 的結(jié)果時,v.Elem() 與 Indirect(v)

當(dāng)傳入 reflect.New(Type) 的結(jié)果時,v.Elem() 與 Indirect(v)

Go
楊__羊羊 2023-03-29 15:43:13
我的問題與這里的這個問題有關(guān):golang - 反射包中的 Elem 與 IndirectsomeX基本上它聲稱如果areflect.Value包含指針,則下面的表達(dá)式為真reflect.Indirect(reflect.ValueOf(someX)) === reflect.ValueOf(someX).Elem()如果是這樣,那為什么我下面的代碼在最后一行崩潰了?package mainimport (  "reflect"  "log")type Person struct {  Name string}func main() {newitem := reflect.New(reflect.ValueOf(Person{}).Type())log.Println(reflect.TypeOf(newitem)) // shows reflect.Valuelog.Println(newitem.Type().Kind()) // shows it is a ptrlog.Println(reflect.Indirect(reflect.ValueOf(newitem))) // this line does not cause paniclog.Println(reflect.ValueOf(newitem).Elem()) // this line causes panic}我一直很難理解 Go 中的 reflect 包,很可能我誤解了 Go 語言的一些基本方面,正如我在過去一周提出的堆棧溢出問題中所指出的那樣。
查看完整描述

1 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗 獲得超11個贊

讓我們分解以下行:


log.Println(reflect.ValueOf(newitem).Elem())

該值newItem是一個 reflect.Value。表達(dá)式reflect.ValueOf(newItem)返回reflect.Value包含 a 的 a reflect.Value。因為包含的值不是指針或接口,所以調(diào)用Elem()恐慌。


以下行不會引起恐慌,因為如果參數(shù)不是指針類型,則 reflect.Indirect 會返回其參數(shù)。


?log.Println(reflect.Indirect(reflect.ValueOf(newitem)))?

問題是應(yīng)用程序正在用 reflect.Values 包裝 reflect.Values。直接使用 reflect.Value,如下代碼所示:


log.Println(reflect.Indirect(newitem))

log.Println(newitem.Elem())

在操場上運行它!


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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