1- Golang 是强类型语言,所以map[int]interface{}
不兼容map[interface{}]interface{}
.
int
与 不同类型interface{}
,请参阅:Go: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
包用于某些用例,但会降低性能(速度)。
参见:反射定律