繁体   English   中英

接口转换:接口是map[string]interface {}不是

[英]interface conversion: interface is map[string]interface {} not

我对 Go 中的所有不同类型感到非常困惑,但我有一个严格定义的结构“VMR”,我正在尝试将数据转换为它。

我正在查询 CouchDB(使用 Go SDK),然后尝试将返回的数据断言到我的结构中。 当然,这是行不通的,它会引发恐慌。 我在黑暗中拍摄,试图找出我做错了什么。

这是我的函数/结构:

type VMR struct {
    Name               string `json:"name,omitempty"`
    InUse              bool   `json:"inuse"`
    Description        string `json:"description,omitempty"`
    View               string `json:"view,omitempty"`
    Theme              string `json:"theme,omitempty"`
    Alias1             int    `json:"alias1,omitempty"`
    Alias1_Description string `json:"alias1_description,omitempty"`
    Host_PIN           int    `json:"host_pin,omitempty"`
    Allow_Guests       bool   `json:"allow_guests,omitempty"`
    Guest_Pin          int    `json:"guest_pin,omitempty"`
    Alias2             int    `json:"alias2,omitempty"`
    Alias2_Description string `json:"alias2_description,omitempty"`
}

func Get() VMR {
    cluster, _ := gocb.Connect("couchbase://ip:port")
    bucket, _ := cluster.OpenBucket("bucket", "password")
    myQuery := gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE name='test42' LIMIT 1")
    rows, _ := bucket.ExecuteN1qlQuery(myQuery, nil)

    var row interface{}
    rows.One(&row)
    fmt.Printf("Query1: %+v\n", row)

    return row.(VMR)
}

完整输出:

Query1: map[115:map[alias1_description:Alias 1 description alias2_description:Alias description description:This is the best VMR name:test42 view:ViewOption theme:Theme51 alias1:1 alias2:1 guest_pin:1 host_pin:1 inuse:false]]

错误:

panic: interface conversion: interface is map[string]interface {}, not models.VMR

viewResults.One(interface{})调用是Next(interface{})的包装器,它在幕后调用json.UnmarshalGithub 链接到相关代码 如果您向Unmarshal提供interface{}对象,它将返回给您一个map[string]interface{}因为它没有其他选项。 尝试这个:

var row VMR
rows.One(&row)
fmt.Printf("Query1: %+v\n", row)

return row

...这应该正确处理 Unmarshal 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM