我正在开发一个Go API,可以接收由JSON对象数组组成的POST请求。POST请求的结构大致如下:
[
{
"name":"Las Vegas",
"size":14
},
{
"valid": false,
"name":"Buffalo",
"size":63
}
]
假设我有以下结构体:
type Data {
Valid bool
Name string
Size float64
}
我希望创建一组
Data
,如果 JSON 中未指定为 false
,则将其设置为 true
。如果我只需要创建单个 Data
,我可以使用如何在 Go 中解析 JSON 时指定默认值,但是对于未知数量的数据,我能想到的唯一方法就是像下面这样:var allMap []map[string]interface{}
var structs []Data
for _, item := range allMap {
var data Data
var v interface{}
var ok bool
if v, ok := item["value"]; ok {
data.Valid = v
} else {
data.Valid = true
}
id v, ok := item["name"]; ok {
data.Name = v
}
...
structs = append(structs, data)
}
return structs
目前我正在使用的结构体有14个字段,其中一些字段的值我想要分配默认值,而另一些则可以留空,但是所有字段都必须使用这种方法进行迭代。
是否有更好的方法?
allData[i] = &Data{Valid: true}
)会复制整个结构体,如果你的结构体很大(你说它有14个字段),那么它可能会很大,如果结构体的大小为200字节,则赋值将复制200字节。 - icza