我有如下所示的数据存储对象:
created (timestamp)
guid (string)
details (string)
start (string)
end (string通常,details、start或end都是NULL。
在Go中,我试图这样做:
type Edge struct {
created time.Time
details string `datastore: "details,omitempty"`
guid string `datastore: "guid,omitempty"`
start string `datastore: "start,omitempty"`
end string `datastore: "end,omitempty"`
}
for t := client.Run(ctx, q); ; {
var x Edge
key, err := t.Next(&x)
if err == iterator.Done {
break
}
if err != nil {
fmt.Printf("error caught: %v\n\n", err)
}
fmt.Printf("Key=%v\nEdge=%#v\n\n", key, x)
}输出错误通常如下所示:
error caught: datastore: cannot load field "guid" into a "main.Edge": no such struct field
Key=/edges,4503602429165568
Edge=main.Edge{created:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, details:"", guid:"", start:"", end:""}当我在数据存储控制台中搜索该键时,我看到guid是一个有效的string。
GetAll给了我几乎相同的问题。
我的问题是:
null。比如start,end和details。这对结构中的string有效吗?谢谢。
发布于 2017-11-20 18:56:47
两个立即突出的问题:
datastore:和值"details,omitempty"之间留出空格。因此,请使用以下结构定义:
type Edge struct {
Created time.Time `datastore:"created"`
Details string `datastore:"details,omitempty"`
Guid string `datastore:"guid,omitempty"`
Start string `datastore:"start,omitempty"`
End string `datastore:"end,omitempty"`
}关于上述两个问题,请参见类似的问题:
如果数据存储中的属性是null,那么对于Go结构来说,这不是问题。在这种情况下,相应的struct字段将是其类型的零值,如果是string类型,则为空字符串""。如果希望区分数据存储null、数据存储“缺失属性”和实际的空字符串"",则可以将字段类型更改为指针(如*string),在这种情况下,丢失的属性和null值将对应于nil指针值,而现有的但空的字符串值将是指向空字符串值的非nil指针。
https://stackoverflow.com/questions/47398282
复制相似问题