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

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

Golang 反射值行為

Golang 反射值行為

Go
翻閱古今 2021-06-15 21:01:51
我目前對(duì) golangs 反射包的行為感到絕望,這對(duì)我來說似乎根本不一致。1)據(jù)我所知,reflect.Value 似乎帶有一個(gè)指向底層值的指針。例如,如果我打電話var s stringv1 := reflect.ValueOf(&s).Elem()v2 := v1v2.SetString("Hello World!")fmt.Println(s)它打印我“Hello World!”。然而,這似乎不適用于通過調(diào)用 Field() 獲得的reflect.Value。val := ... //Assign a reflect.Value to itnextval := val.Field(0) //Make sure that Field exists and is of type mapnextval = reflect.MakeMap(reflect.MapOf(KEY, ELEM))nextval.SetMapIndex(Some_value_of_type_KEY, Something_of_type_ELEM)fmt.Println(nextval.MapKeys()fmt.Println(val.Field(index).MapKeys())這打印[Some_value_of_type_KEY][]這是一個(gè)主要的煩惱。有誰知道為什么會(huì)這樣?================================================== =2)考慮功能func Test(v interface{}) {    val := reflect.ValueOf(v)    if val.Kind() != reflect.Struct {        fmt.Println("It is a struct")    }}如果我用任何結(jié)構(gòu)作為參數(shù)調(diào)用它,它會(huì)打印“這是一個(gè)結(jié)構(gòu)”。但是,由于值不可尋址,我將無法使用 val 為 v 中的內(nèi)容分配新值。通過以下方式解決:func Test(v interface{}) {    val := reflect.ValueOf(&v).Elem()    if val.Kind() != reflect.Struct {        fmt.Println("This never get's printed!")    }}根據(jù)文檔,我會(huì)假設(shè),通過使用 '&' 我使用指向 v 的指針,并通過調(diào)用 Elem() 我得到它指向的元素,因此 val.Kind() 應(yīng)該仍然返回相同的東西. 它沒有。val.Kind() 現(xiàn)在是一個(gè)reflect.Interface。有沒有不用去的方法valForTestingKind := reflect.ValueOf(v)valForSettingNewValue := reflect.ValueOf(&v).Elem()因?yàn)檫@在某種程度上感覺不對(duì)。
查看完整描述

3 回答

?
婷婷同學(xué)_

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

我想談?wù)勀愕牡诙€(gè)代碼塊:


val := ... //Assign a reflect.Value to it

nextval := val.Field(0) //Make sure that Field exists and is of type map

nextval = reflect.MakeMap(reflect.MapOf(KEY, ELEM))

nextval.SetMapIndex(Some_value_of_type_KEY, Something_of_type_ELEM)

fmt.Println(nextval.MapKeys()

fmt.Println(val.Field(index).MapKeys())

在第三行,您將一個(gè)新的、不同的對(duì)象重新分配給變量nextval。你不應(yīng)該在 nextval 上調(diào)用某種設(shè)置方法而不是重新分配它嗎?在您的第一個(gè)示例中,您調(diào)用了SetString但在本示例中您只是重新分配了變量,這可能就是行為不同的原因。重新分配變量后,nextval將不再以任何方式連接到val.Field(0). 另外,什么是index?


如果這不能解釋您的問題,請(qǐng)編輯問題以包含一個(gè)簡短的、獨(dú)立的、正確的、可編譯的示例 ( SSCCE )。我希望能夠?qū)⑵浒l(fā)布到golang.org首頁的文本框中以便查看問題。如果可能,您應(yīng)該始終發(fā)布 SSCCE。


查看完整回答
反對(duì) 回復(fù) 2021-06-21
?
幕布斯6054654

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

您尚未展示完整且可編譯的代碼。你是傳遞一個(gè)指向結(jié)構(gòu)的指針還是按值傳遞結(jié)構(gòu)?在后一種情況下,反射不能改變它。


查看完整回答
反對(duì) 回復(fù) 2021-06-21
  • 3 回答
  • 0 關(guān)注
  • 215 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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