首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌Datastore明渠

谷歌Datastore明渠
EN

Stack Overflow用户
提问于 2017-11-20 17:57:29
回答 1查看 942关注 0票数 1

我有如下所示的数据存储对象:

代码语言:javascript
复制
created (timestamp)
guid (string)
details (string)
start (string)
end (string

通常,detailsstartend都是NULL

在Go中,我试图这样做:

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

输出错误通常如下所示:

代码语言:javascript
复制
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给了我几乎相同的问题。

我的问题是:

  • 我是新来的。我在这里做错什么了吗?(任何类型的字体都是特定于Stackoverflow的。因为我在这里改变了一些东西)
  • 在将数据存储放入结构之前,是否需要查看数据存储发送回的内容?
  • 其中一些值有时将是null。比如startenddetails。这对结构中的string有效吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-20 18:56:47

两个立即突出的问题:

  1. 必须导出Struct字段,因此它们的名称以大写字母开头。
  2. 您的标签值是“无效的”(它们不遵循约定)。不能在键datastore:和值"details,omitempty"之间留出空格。

因此,请使用以下结构定义:

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

关于上述两个问题,请参见类似的问题:

golang获取空对象

为什么struct字段显示为空?

如果数据存储中的属性是null,那么对于Go结构来说,这不是问题。在这种情况下,相应的struct字段将是其类型的零值,如果是string类型,则为空字符串""。如果希望区分数据存储null、数据存储“缺失属性”和实际的空字符串"",则可以将字段类型更改为指针(如*string),在这种情况下,丢失的属性和null值将对应于nil指针值,而现有的但空的字符串值将是指向空字符串值的非nil指针。

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

https://stackoverflow.com/questions/47398282

复制
相关文章

相似问题

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