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

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

附加兩個(gè)數(shù)組的通用函數(shù)

附加兩個(gè)數(shù)組的通用函數(shù)

Go
婷婷同學(xué)_ 2023-07-10 17:37:46
無(wú)法弄清楚如何將從函數(shù)返回的接口{}轉(zhuǎn)換為結(jié)構(gòu)數(shù)組作為一些實(shí)踐的一部分,我試圖創(chuàng)建一個(gè)函數(shù),它可以采用某種類型的 2 個(gè)切片并將兩者連接起來(lái)并返回切片。代碼可以在這里找到 - https://play.golang.org/p/P9pfrf_qTS1type mystruct struct {    name  string    value string}func appendarr(array1 interface{}, array2 interface{}) interface{} {    p := reflect.ValueOf(array1)    q := reflect.ValueOf(array2)    r := reflect.AppendSlice(p, q)    return reflect.ValueOf(r).Interface()}func main() {    fmt.Println("=======")    array1 := []mystruct{        mystruct{"a1n1", "a1v1"},        mystruct{"a1n2", "a1v2"},    }    array2 := []mystruct{        mystruct{"a2n1", "a2v1"},        mystruct{"a2n2", "a2v2"},    }    arrayOp := appendarr(array1, array2)    fmt.Printf("arr: %#v\n", arrayOp) // this shows all the elements from array1 and 2    val := reflect.ValueOf(arrayOp)    fmt.Println(val)                          // output is <[]main.mystruct Value>    fmt.Println(val.Interface().([]mystruct)) // exception - interface {} is reflect.Value, not []main.mystruct}我可能有不同類型結(jié)構(gòu)的切片。我想連接它們并單獨(dú)訪問(wèn)元素。如果有任何其他方法可以實(shí)現(xiàn)相同的目的,請(qǐng)告訴我。
查看完整描述

1 回答

?
aluckdog

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

reflect.Append()返回類型為 的值reflect.Value,因此您不必(不應(yīng)該)將其傳遞給reflect.ValueOf()

所以只需將return語(yǔ)句更改為:

return?r.Interface()

這樣它就可以工作并輸出(在Go Playground上嘗試一下):

=======
arr:?[]main.mystruct{main.mystruct{name:"a1n1",?value:"a1v1"},?main.mystruct{name:"a1n2",?value:"a1v2"},?main.mystruct{name:"a2n1",?value:"a2v1"},?main.mystruct{name:"a2n2",?value:"a2v2"}}
[{a1n1?a1v1}?{a1n2?a1v2}?{a2n1?a2v1}?{a2n2?a2v2}]
[{a1n1?a1v1}?{a1n2?a1v2}?{a2n1?a2v1}?{a2n2?a2v2}]

您也不需要對(duì)結(jié)果做任何反射功夫:它是您的切片包裹在interface{}.?將其包裝起來(lái)reflect.Value并調(diào)用Value.Interface()它只是一個(gè)多余的循環(huán)。您可以簡(jiǎn)單地執(zhí)行以下操作:

arrayOp.([]mystruct)

附帶說(shuō)明:您不應(yīng)該創(chuàng)建在append()底層使用反射的“通用”函數(shù),因?yàn)榇斯δ芸勺鳛閮?nèi)置函數(shù)使用append()。內(nèi)置函數(shù)是通用的,它從編譯器獲得幫助,因此它在編譯時(shí)提供通用性質(zhì)。無(wú)論你使用反射想出什么,都會(huì)變慢。


查看完整回答
反對(duì) 回復(fù) 2023-07-10
  • 1 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

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