我有一个自定义类型map[string]map[string]string
我尝试保存在Google数据存储区中,保存按预期工作。但是,加载函数会抱怨assignment to entry in nil map
//Address represents address
type Address map[string]map[string]string
上面的类型是map [string]字符串的映射,目标是保存不同的地址类型。
//Load function from PropertyLoaderInterface helps datastore load this object
func (a *Address) Load(dp []datastore.Property) error {
for _, property := range dp {
(*a)[property.Name] = util.InterfaceToMapString(property.Value)
}
return nil
}
在加载函数中,我将地址作为map [string]字符串的映射,它保存了以下示例JSON格式。
"Company":{
"physicalAddress": "",
"postalAddress": "",
"physicalCity": "",
"postalCity": "",
"physicalCode": "",
"postalCode": "",
"physicalCountry": "",
"postalCountry": ""
}
以下保存功能运行良好,数据存储在数据存储区中。然而,负载是一个棘手的错误。
//Save function from PropertyLoaderInterface helps datastore save this object
func (a *Address) Save() ([]datastore.Property, error) {
propertise := []datastore.Property{}
for name, value := range *a {
propertise = append(propertise, datastore.Property{Name: name,
NoIndex: true,
Value: util.MapToJSONString(value)})
}
return propertise, nil
}
地址结构的工作负载
func (a *Address) Load(dp []datastore.Property) error {
*a = make(Address)
for _, property := range dp {
(*a)[property.Name] = util.InterfaceToMapString(property.Value)
}
return nil
}
答案 0 :(得分:2)
首先,关于声明 - https://stackoverflow.com/a/42901715/4720042
接下来,我觉得你应该为此目的使用自定义结构。
即使您仍想使用map[string]map[string]string
,也无法将地图中的字段分配给尚未明确定义的字段。 property.Name
如果您打算稍后添加元素,则必须使用make
初始化该地图。