首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口转换:接口为map[string]接口{} not

接口转换:接口为map[string]接口{} not
EN

Stack Overflow用户
提问于 2016-08-01 11:08:09
回答 1查看 7.9K关注 0票数 2

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

我正在查询CouchDB (使用Go SDK),然后尝试将返回的数据断言到我的结构中。当然,这是不起作用的,它引起了恐慌。我在摸索,想找出我做错了什么。

下面是我的函数/结构:

代码语言:javascript
复制
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]]

错误:

代码语言:javascript
复制
panic: interface conversion: interface is map[string]interface {}, not models.VMR
EN

回答 1

Stack Overflow用户

发布于 2016-08-11 00:01:45

viewResults.One(interface{})调用是Next(interface{})的包装器,它在幕后调用json.UnmarshalGithub link to relevant code。如果您向Unmarshal提供了一个interface{}对象,它将向您返回一个map[string]interface{},因为它没有其他选项。试试这个:

代码语言:javascript
复制
var row VMR
rows.One(&row)
fmt.Printf("Query1: %+v\n", row)

return row

应该正确处理解组的...and。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38690467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档