亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

附加兩個數組的通用函數

附加兩個數組的通用函數

Go
婷婷同學_ 2023-07-10 17:37:46
無法弄清楚如何將從函數返回的接口{}轉換為結構數組作為一些實踐的一部分,我試圖創建一個函數,它可以采用某種類型的 2 個切片并將兩者連接起來并返回切片。代碼可以在這里找到 - 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}我可能有不同類型結構的切片。我想連接它們并單獨訪問元素。如果有任何其他方法可以實現相同的目的,請告訴我。
查看完整描述

1 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

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

所以只需將return語句更改為:

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}]

您也不需要對結果做任何反射功夫:它是您的切片包裹在interface{}.?將其包裝起來reflect.Value并調用Value.Interface()它只是一個多余的循環。您可以簡單地執行以下操作:

arrayOp.([]mystruct)

附帶說明:您不應該創建在append()底層使用反射的“通用”函數,因為此功能可作為內置函數使用append()。內置函數是通用的,它從編譯器獲得幫助,因此它在編譯時提供通用性質。無論你使用反射想出什么,都會變慢。


查看完整回答
反對 回復 2023-07-10
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號