我真的对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发布于 2016-08-11 00:01:45
viewResults.One(interface{})调用是Next(interface{})的包装器,它在幕后调用json.Unmarshal:Github link to relevant code。如果您向Unmarshal提供了一个interface{}对象,它将向您返回一个map[string]interface{},因为它没有其他选项。试试这个:
var row VMR
rows.One(&row)
fmt.Printf("Query1: %+v\n", row)
return row应该正确处理解组的...and。
https://stackoverflow.com/questions/38690467
复制相似问题