为什么GAE数据存储区不支持简单的struct字段类型?

时间:2015-06-21 19:07:31

标签: go google-cloud-datastore

my unit test失败并显示消息:

  

& errors.errorString {s:“datastore:unsupported struct field type:sus.Version”}

我有一个测试结构类型,我试图保存到GAE数据存储区:

type foo struct{
    sus.Version
}

其中sus.Version是界面:

type Version interface{
    GetVersion() int
    getVersion() int
    incrementVersion() 
    decrementVersion() 
}

我尝试使用两个版本实现运行我的测试,首先它只是一个int的别名:

type version int

其次是结构:

type version struct{
    val int
}

其中Version接口方法被赋予接收器类型(v *version),它需要是一个指针,因此递减和增量实际上更新它们被调用的版本而不仅仅是一个副本。我不确定为什么这不起作用,可能是因为它是一个匿名字段?或者因为它是指向int或struct而不是实际的int或struct的指针?

1 个答案:

答案 0 :(得分:5)

datastore package不允许使用所有类型。特别是,它只允许使用以下类型:

- signed integers (int, int8, int16, int32 and int64),
- bool,
- string,
- float32 and float64,
- []byte (up to 1 megabyte in length),
- any type whose underlying type is one of the above predeclared types,
- ByteString,
- *Key,
- time.Time (stored with microsecond precision),
- appengine.BlobKey,
- appengine.GeoPoint,
- structs whose fields are all valid value types,
- slices of any of the above.

请注意,这并不包含"任何界面类型"。