使用Go的appengine / datastore中的Nilable值

时间:2015-04-18 14:51:32

标签: google-app-engine go google-cloud-datastore

数据存储区支持的类型列表不包含指针类型(https://cloud.google.com/appengine/docs/go/datastore/reference)。 那我怎么能代表一个有时候应该是零的价值呢? 例如,在以下结构中,我需要DailyValuePercent可以明确表示缺少该值。

type NutritionFact struct {
    Name                string  `datastore:",noindex" json:"name"`
    DailyValuePercent   int     `datastore:",noindex" json:"dailyValuePercent"`
}

由于我不能使用* int作为数据存储区的字段类型,那么如何表示可选值?

1 个答案:

答案 0 :(得分:0)

将整数存储为字符串(空字符串=>无值)或使用类似的复合类型:

type NillableInt struct {
    i     int
    isNil bool  // or isNotNil bool if you want different default semantics
}

适应您的性能与内存使用要求。

如果您希望代码处理int指针但在数据存储区中保留nil值,请按以下方式定义结构:

type NutritionFact struct {
       Name                string  `datastore:",noindex" json:"name"`
       DailyValuePercent   int `datastore:"-"`
}

实现PropertyLoadSaver接口,您将保存/加载一个int值和一个isNil布尔值。