我正在尝试遍历Card
interface
dialogCommands
。我可以正常迭代它,每slice
Println
给我一个Index
。但是,此map
打印为类型map
struct
此输出是
if reflect.TypeOf(dialogCommands).Kind() == reflect.Slice {
commands := reflect.ValueOf(dialogCommands)
for i:=0; i<commands.Len(); i++ {
v := commands.Index(i)
fmt.Println(reflect.TypeOf(v).Kind())
fmt.Println(v)
}
如您所见,类型为struct
map[options:[a b c]]
struct
map[startDialogs:[dialog1]]
,但输出为struct
。如何遍历map
的{{1}}?我不能仅仅将它视为地图,因为它的类型为keys
,所以我需要一种方法来迭代它,但正如您所见,v
是reflect.Value
而kind
}说它是struct
更新
这是Println
结构
map
并记住Dialog
已被解组为type Dialog struct {
Dialog bson.Raw `json:"dialog" bson:"dialog"`
}
dialogCommands
答案 0 :(得分:0)
表达式reflect.TypeOf(v).Kind()
返回v
的类型,而不是v
中的基础值。变量v的类型为reflect.Value
。这是一种结构类型。
以下打印语句将打印您期望的假设dialogCommands
是一片地图:
fmt.Println(v.Kind()) // prints the kind of v's underlying value
fmt.Println(v) // prints v's underlying value
根据您对此问题的评论,看起来dialogCommands
是一个接口片段。如果是这样,那么您将需要使用接口的元素:
if v.Kind() == reflect.Interface {
v = v.Elem()
}
fmt.Println(v.Kind())
fmt.Println(v)