1 回答

TA貢獻1876條經驗 獲得超5個贊
在 Go 中,數組是不靈活的(因為它們的長度是用它們的類型編碼的)并且傳遞給函數的成本很高(因為函數對其數組參數的副本進行操作)。我假設您想對切片而不是數組進行操作。
因為方法不能接受額外的類型參數,所以你不能簡單地在 Go 中聲明一個泛型Map 方法。但是,您可以定義Map為通用頂級函數:
func Map[T, U any](ts []T, f func(T) U) []U {
us := make([]U, len(ts))
for i := range ts {
us[i] = f(ts[i])
}
return us
}
然后你可以寫下面的代碼,
names := []string{"Alice", "Bob", "Carol"}
fmt.Println(Map(names, utf8.RuneCountInString))
打印到標準輸出(在這個 Playground[5 3 5]中嘗試)。
Go 1.18 看到添加了一個golang.org/x/exp/slices
package,它提供了許多對切片的方便操作,但是其中Map
明顯缺少一個功能。該功能的遺漏是在專門針對該提案的GitHub 問題中進行了長時間討論的結果;golang.org/x/exp/slices
關切包括以下方面:
Russ Cox最終選擇Map
退出該提案,因為它
作為其他地方更全面的流 API 的一部分可能更好。
- 1 回答
- 0 關注
- 110 瀏覽
添加回答
舉報