我想創(chuàng)建一個函數(shù),它接受一個映射或一個數(shù)組,并迭代它,在每個項目上調(diào)用一個函數(shù),該函數(shù)知道如何處理遇到的任何類型。這是我第一次失敗的嘗試。目前,當我在實際用例中運行它時,它總是說“哦哦!”。func DoTheThingToAllTheThings(data_interface interface{}) int { var numThings int switch data := data_interface.(type) { case map[interface{}]interface{}: numThings = len(data) for index, item := range data { DoTheThing(index, item) } case []interface{}: numThings = len(data) for index, item := range data { DoTheThing(index, item) } default: fmt.Println("uh oh!") } return numThings}數(shù)組或映射可能包含許多不同的內(nèi)容,因此嘗試匹配每個可能的輸入不是一個選項。換句話說,有沒有辦法在不確切知道它是什么的情況下迭代 Go 中的數(shù)組或映射?
2 回答

慕桂英3389331
TA貢獻2036條經(jīng)驗 獲得超8個贊
為了讓您的示例工作,您需要構(gòu)建一個interface{}(或映射)數(shù)組,以便檢測到正確的類型:
// This won't work, as the .(type) would be []S
someS := []S{S{}}
DoTheThingToAllTheThings(someS)
// This will: it will go in case []interface{}:
someSI := make([]interface{}, len(someS))
for i, s := range someS {
someSI[i] = s
}
DoTheThingToAllTheThings(someSI)
在此處查看完整示例。
但這意味著您仍然可以interface{}在您的DoTheThing功能中使用。
這里沒有真正的泛型,正如我在“ Go 中的泛型是什么? ”中提到的。
- 2 回答
- 0 關注
- 185 瀏覽
添加回答
舉報
0/150
提交
取消