我想创建一个泛型方法,以数组的形式从映射中提取键--这样数组的类型就应该与映射中键的类型相同.我知道我希望用法是这样的:
mapWithStringKeys := map[string]string {
"one": "1",
"ten": "10",
"hundred": "100",
}
mapWithIntKeys := map[int]string {
1: "one",
10: "ten",
100: "hundred",
}
keys(mapWithStringKeys) // []string{"one", "ten", "hundred"}
keys(mapWithStringKeys) // []int{1, 10, 100}
提取密钥的内部逻辑如下所示:
keys := make([]<TYPE>, 0, len(mymap))
for k := range mymap {
keys = append(keys, k)
}
我在定义函数时遇到了很多问题,这样Golang就知道如何"传递"类型.我的想象是这样的:
func keys[T infer](m map[T]any) []T {
keysArr := make([]T, 0, len(mymap))
for k := range mymap {
keysArr = append(keysArr, k)
}
return keysArr
}
但我真的搞不清楚,所以我想知道这是否可能,如果不可能,为什么?