Dictionary 每个映射都是struct类型,反映了一个映射切片?
我正在尝试遍历Dictionary 每个映射都是struct类型,反映了一个映射切片?,dictionary,go,struct,Dictionary,Go,Struct,我正在尝试遍历接口对话框命令,这是一个切片。我可以正常地遍历它,在每个索引中的Println会给我一个映射。但是,此映射被打印为具有类型struct if reflect.TypeOf(dialogCommands).Kind() == reflect.Slice { commands := reflect.ValueOf(dialogCommands) for i:=0; i<commands.Len(); i++ { v := commands
接口
对话框命令
,这是一个切片
。我可以正常地遍历它,在每个索引中的Println
会给我一个映射。但是,此映射
被打印为具有类型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
。如何遍历v
的键
?我不能仅仅把它当作一个映射,因为它的类型是reflect.Value
,所以我需要一种方法来遍历它,但是正如你所看到的,类是struct
,而Println
表示它是一个map
更新:
下面是对话框
结构
type Dialog struct {
Dialog bson.Raw `json:"dialog" bson:"dialog"`
}
请记住,dialogCommands
被解组到interface{}
[map[options:[a b c]] map[startDialogs:[dialog1]]]
表达式reflect.TypeOf(v).Kind()
返回v
的类型,而不是v
中的基础值。变量v的类型为。这是一个结构类型
假设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)
您应该包括dialogCommands的定义以及其中存储的任何内容,而不仅仅是向我们描述它。最棒的是一个完整的围棋程序,它将在@ZanLynx的围棋场上运行。我更新了更好的信息,你认为它足够了吗?这还不足以让我对它感兴趣。我必须编写各种支持代码,而且我已经有了一份工作。也许你会和其他人交好运。谢谢,它打印在“struct”的位置。但是,如果打印时,它说这是一张地图,这怎么可能呢?我的意思是,它打印的是“接口”,而不是在看到更新的答案之前的“结构”。对话框命令的类型是什么?
if v.Kind() == reflect.Interface {
v = v.Elem()
}
fmt.Println(v.Kind())
fmt.Println(v)