當我想以類似的方式使用地圖的鍵但地圖中的值不同時,我遇到過幾次這個問題。我以為我可以編寫一個函數(shù),將我想要的鍵類型與 interface{} 作為值類型,但它不起作用。func main() { mapOne := map[string]int mapTwo := map[string]double mapThree := map[string]SomeStruct useKeys(mapOne)}func useKeys(m map[string]interface{}) { //something with keys here}不知道是否有一種優(yōu)雅的方式來做到這一點,我只是覺得腰部飽滿,為不同的價值觀重寫了簡單的東西。
2 回答

桃花長相依
TA貢獻1860條經(jīng)驗 獲得超8個贊
盡管 go 中的地圖和切片本身是泛型的,但它們不是協(xié)變的(也不可能是協(xié)變的,因為接口不是泛型)。這是使用沒有泛型的語言的一部分,您將不得不重復一些事情。
如果你真的只需要獲取任何舊地圖的鍵,你可以使用反射來做到這一點:
func useKeys(m interface{}) {
v := reflect.ValueOf(m)
if v.Kind() != reflect.Map {
fmt.Println("not a map!")
return
}
keys := v.MapKeys()
fmt.Println(keys)
}
- 2 回答
- 0 關(guān)注
- 195 瀏覽
添加回答
舉報
0/150
提交
取消