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