Golang 返回默认的结构数组
Golang returning a default array of structs
当我卷曲 api 时,我得到这样的响应:
[{"Hits":25,"Name":"HIT"},{"Hits":87,"Name":"MISS"},{"Hits":15,"Name":"EXPIRED"}]
当响应返回 0 值时,即 curl returns this :
[{"Hits":0,"Name":"HIT"},{"Hits":0,"Name":"MISS"},{"Hits":0,"Name":"EXPIRED"}]
在具有 0 值响应的代码中解组 json 后,我实际得到的是:
[{1 NONE}]
我实际上需要具有 0 值的键名称,因为我将其写到一个文件中,最终将被另一个系统使用。
为了解决这个问题,我创建了一个默认数组,如果 return 给我 [{1 NONE}]
例如:
type CHData struct {
Hits int `json:"Hits"`
Name string `json:"Name"`
}
func apiResponse () apiResponseData,err{
//code that calls the api and returns the response {
...
json.Unmarshal([]byte(body), &apiResponseData)
..
}
if len(apiReturneddata) <= 1 { // checks for [{1 NONE}] value
//Default array if api returns with 0 values
array1 := CHData{Hits: 0, Name: "HIT"}
array2 := CHData{Hits: 0, Name: "MISS"}
array3 := CHData{Hits: 0, Name: "EXPIRED"}
//adding each json into the array of json's
var mockData []CHData
mockData = append(mockData, array1)
mockData = append(mockData, array2)
mockData = append(mockData, array3)
log.Println(mockData)
i, _ := json.Marshal(mockData)
//log.Println(string(i))
//Overwrite the "[{1 NONE}]" with [{"Hits":0,"Name":"HIT"},{"Hits":0,"Name":"MISS"},{"Hits":0,"Name":"EXPIRED"}]
json.Unmarshal([]byte(i), &apiResponseData)
}
return apiResponseData
}
- ^ 这行得通,但是有没有更好的方法来做到这一点,它看起来很冗长,我在这个数组中只有 3 个结构,但我可以有更多?
- 为什么 return
[{1 NONE}]
而不是 Key:Value struts?
我假设 apiResponseData 是 []CHData
您应该检查响应是否为 none(1 个条目、1 个名为 None 的匹配等)
如果是,使用默认响应。
type apiResponseData []CHData
var defaultAPIResponseData = apiResponseData{
{0, "HIT"},
{0, "MISS"},
{0, "EXPIRED"},
}
func (r apiResponseData) IsNone() bool {
return len(r) == 1 && r[0].Name == "None"
}
当我卷曲 api 时,我得到这样的响应:
[{"Hits":25,"Name":"HIT"},{"Hits":87,"Name":"MISS"},{"Hits":15,"Name":"EXPIRED"}]
当响应返回 0 值时,即 curl returns this :
[{"Hits":0,"Name":"HIT"},{"Hits":0,"Name":"MISS"},{"Hits":0,"Name":"EXPIRED"}]
在具有 0 值响应的代码中解组 json 后,我实际得到的是:
[{1 NONE}]
我实际上需要具有 0 值的键名称,因为我将其写到一个文件中,最终将被另一个系统使用。
为了解决这个问题,我创建了一个默认数组,如果 return 给我 [{1 NONE}]
例如:
type CHData struct {
Hits int `json:"Hits"`
Name string `json:"Name"`
}
func apiResponse () apiResponseData,err{
//code that calls the api and returns the response {
...
json.Unmarshal([]byte(body), &apiResponseData)
..
}
if len(apiReturneddata) <= 1 { // checks for [{1 NONE}] value
//Default array if api returns with 0 values
array1 := CHData{Hits: 0, Name: "HIT"}
array2 := CHData{Hits: 0, Name: "MISS"}
array3 := CHData{Hits: 0, Name: "EXPIRED"}
//adding each json into the array of json's
var mockData []CHData
mockData = append(mockData, array1)
mockData = append(mockData, array2)
mockData = append(mockData, array3)
log.Println(mockData)
i, _ := json.Marshal(mockData)
//log.Println(string(i))
//Overwrite the "[{1 NONE}]" with [{"Hits":0,"Name":"HIT"},{"Hits":0,"Name":"MISS"},{"Hits":0,"Name":"EXPIRED"}]
json.Unmarshal([]byte(i), &apiResponseData)
}
return apiResponseData
}
- ^ 这行得通,但是有没有更好的方法来做到这一点,它看起来很冗长,我在这个数组中只有 3 个结构,但我可以有更多?
- 为什么 return
[{1 NONE}]
而不是 Key:Value struts?
我假设 apiResponseData 是 []CHData
您应该检查响应是否为 none(1 个条目、1 个名为 None 的匹配等)
如果是,使用默认响应。
type apiResponseData []CHData
var defaultAPIResponseData = apiResponseData{
{0, "HIT"},
{0, "MISS"},
{0, "EXPIRED"},
}
func (r apiResponseData) IsNone() bool {
return len(r) == 1 && r[0].Name == "None"
}