登录
首页 >  Golang >  Go问答

Golang 返回默认的结构数组

来源:stackoverflow

时间:2024-04-17 20:12:35 435浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《Golang 返回默认的结构数组》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

当我卷曲 api 时,我得到如下响应:

[{"hits":25,"name":"hit"},{"hits":87,"name":"miss"},{"hits":15,"name":"expired"}]

当响应返回 0 值时,即,curl 返回:

[{"hits":0,"name":"hit"},{"hits":0,"name":"miss"},{"hits":0,"name":"expired"}]

在使用 0 值响应解组代码中的 json 后,我实际得到的是:

[{1 none}]

我实际上需要带有 0 值的键名称,因为我要将其写入文件,最终由另一个系统使用。

为了解决这个问题,如果返回给我一个 [{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
}
  1. ^ 这可行,但是有没有更好的方法来做到这一点,它看起来非常冗长,我这个数组中只有 3 个结构,但我可以有更多?
  2. 为什么它还是返回 [{1 none}] 而不是 key:value struts?

正确答案


我假设 apiresponsedata 是 []chdata

您应该检查响应是否为“无”(1 个条目、1 个名为“无”的命中等)

如果是,则使用默认响应。

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"
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>