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

我的单元测试失败并显示以下消息:


&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 的指针?


哆啦的时光机
浏览 165回答 1
1回答

富国沪深

该数据存储包不允许使用的所有类型。特别是,它只允许使用以下类型:- 有符号整数(int、int8、int16、int32 和 int64),- 布尔,- 细绳,- float32 和 float64,- []byte(最长 1 兆字节),- 任何类型的基础类型是上述预先声明的类型之一,- 字节串,- *钥匙,- time.Time(以微秒精度存储),- appengine.BlobKey,- appengine.GeoPoint,- 字段都是有效值类型的结构,- 以上任何一种切片。请注意,这不包括“任何接口类型”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go