具有名称的属性的数据存储区值类型无效

MSp*_*Dev 3 arrays properties go google-cloud-datastore google-cloud-platform

我正在尝试使用 GoLang 中的 PropertyList 将 int64 数组保存到数据存储区。

这是 PropertyList 中的属性: 列表中的属性

但是,我收到此错误: 错误信息

我知道您可以在数据存储中存储数组,尤其是基元数组。所以当我尝试通过 PropertyList 插入它时,我不确定我做错了什么。我的所有其他属性都得到正确保存(它们只是单个基元)。数组导致了这个问题。

MSp*_*Dev 5

解决了!感谢@mkopriva的帮助。

如果要保存任何受支持的数据存储区数据类型的数组,则必须将该数组的每个元素追加到新interface{}数组中。 值字段文档

我编写了这个反射函数来处理任何切片类型:

src := []int64{1, 2, 3, 4, 5}
value := reflect.ValueOf(src)
kind := value.Kind()
switch kind {
case reflect.Slice:
    interfaceArr := make([]interface{},0)
    for i := 0; i < value.Len(); i++ {
        interfaceArr = append(interfaceArr, value.Index(i).Interface())
    }
    return interfaceArr
}
Run Code Online (Sandbox Code Playgroud)

以下是数组属性在属性列表中的正确显示方式: 工作财产