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
map [interface {}] interface {}和map [int] interface {}是不同的类型,这就是为什么你会得到错误。也许你可以改变m2来键入map [interface {}] interface {} – zzn