【发布时间】:2016-11-06 06:09:39
【问题描述】:
我正在尝试创建一个可以接受关注的函数
*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{} 转换为映射和迭代或获取它的元素。
【问题讨论】:
标签: dictionary reflection go interface