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)