1- Golang 是强类型语言,所以map[int]interface{} 与map[interface{}]interface{} 不兼容。
int 与interface{} 的类型不同,
看看:Go: What's the meaning of interface{}?
2- 不,Golang 不支持泛型,这非常好,因为它使语言简单快速。
你有一些选择:
如果您不想更改使用的地图类型:
1- 您可以将函数编辑为:func Keys(m map[int]interface{}) []int,就像这个工作示例代码:
package main
import "fmt"
func main() {
m2 := map[int]interface{}{
2: "string",
3: "int",
}
fmt.Println(Keys(m2))
}
func Keys(m map[int]interface{}) []int {
keys := make([]int, len(m))
i := 0
for k := range m {
keys[i] = k
i++
}
return keys
}
输出(可能不按顺序):
[2 3]
2- 或者您可以将函数编辑为:func Keys(m map[int]interface{}) []interface{},就像这个工作示例代码:
package main
import "fmt"
func main() {
m2 := map[int]interface{}{
2: "string",
3: "int",
}
fmt.Println(Keys(m2))
}
func Keys(m map[int]interface{}) []interface{} {
keys := make([]interface{}, len(m))
i := 0
for k := range m {
keys[i] = k
i++
}
return keys
}
输出(可能不按顺序):
[2 3]
如果您不想更改使用的Keys 函数:
3- 您可以将地图编辑到:map[interface{}]interface{},就像这个工作示例代码:
package main
import "fmt"
func main() {
m2 := map[interface{}]interface{}{
2: "string",
3: "int",
}
fmt.Println(Keys(m2))
}
func Keys(m map[interface{}]interface{}) []interface{} {
keys := make([]interface{}, len(m))
i := 0
for k := range m {
keys[i] = k
i++
}
return keys
}
4- 您也可以在某些用例中使用 reflect 包,但会降低性能(速度)。
请参阅:The Laws of Reflection