我正在尝试使用Google Datastore来存储Go的数据 . 由于 EndDate
是可选字段,并且不希望在该字段中存储零值 . 如果我为时间字段制作指针,Google Datastore将发送错误消息 - datastore: unsupported struct field type: *time.Time
如何忽略struct中的零值字段?
type Event struct {
StartDate time.Time `datastore:"start_date,noindex" json:"startDate"`
EndDate time.Time `datastore:"end_date,noindex" json:"endDate"`
}
2 回答
默认保存机制不处理可选字段 . 字段要么一直保存,要么永远不保存 . 没有“只有在 Value 不等于某事时才能保存”这样的事情 .
"optionally saved property"被视为自定义行为,自定义保存机制,因此必须手动实现 . Go的方法是在你的struct上实现PropertyLoadSaver接口 . 在这里,我提出了两种不同的方法来实现:
手动保存字段
下面是一个示例如何通过手动保存字段来实现(如果它是零值,则排除
EndDate
):使用另一个结构
这是使用另一个结构的另一种方式 .
Load()
实现始终相同,只有Save()
不同:在字段标记中使用omitempty . 来自文档:https://golang.org/pkg/encoding/json/