我試圖創造一種可以接受以下轉換接口{}映射在Golang
*struct
[]*struct
map[string]*struct
這裏結構可以是任何結構不只是一個特定的功能。 轉換接口到*struct
或[]*struct
工作正常。 但給地圖的錯誤。
反映後顯示它是map [],但在嘗試迭代範圍時發生錯誤。
這裏是代碼
package main
import (
"fmt"
"reflect"
)
type Book struct {
ID int
Title string
Year int
}
func process(in interface{}, isSlice bool, isMap bool) {
v := reflect.ValueOf(in)
if isSlice {
for i := 0; i < v.Len(); i++ {
strct := v.Index(i).Interface()
//... proccess struct
}
return
}
if isMap {
fmt.Printf("Type: %v\n", v) // map[]
for _, s := range v { // Error: cannot range over v (type reflect.Value)
fmt.Printf("Value: %v\n", s.Interface())
}
}
}
func main() {
b := Book{}
b.Title = "Learn Go Language"
b.Year = 2014
m := make(map[string]*Book)
m["1"] = &b
process(m, false, true)
}
有什麼辦法轉換interface{}
映射和迭代或得到它的元素。
不錯。我在你的貼子上添加了MapKeys到我的答案部分! – cnicutar
工作絕對好。非常感謝。 – SamTech