Improving a GET request using the default Go HTTP client

huangapple go评论88阅读模式
英文:

Improving a GET request using the default Go HTTP client

问题

我想改进我在使用Go语言的net/http包中的函数中的GET请求。

在该函数中,我使用了bodyText, err := ioutil.ReadAll(resp.Body),但我不确定这是否是从服务器获取JSON响应的最佳方式。

// 获取HTTP状态码
func StatusF(url string, token string) *statusf {
    // 设置请求
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("Authorization", token)

    // 发送请求
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }

    // 关闭响应
    defer resp.Body.Close()

    // 从服务器获取响应
    bodyText, err := ioutil.ReadAll(resp.Body)
    fmt.Printf("response:%s", bodyText)

    var myvar StructureJson // 创建一个空的StructureJson实例
    err = json.Unmarshal([]byte(bodyText), &myvar)
    if err != nil {
        panic(err)
    }

    // 返回JSON对象
    return &myvar
}
英文:

I'd like to improve the GET request that I'm using in a function using the net/http package in Go.

I'm using bodyText, err := ioutil.ReadAll(resp.Body) in the function, but I'm not sure if this is the best way to get the JSON response from the server.

// Getting HTTP Status code
func StatusF (url string, token string) *statusf {
    // Setup req
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("Authorization", token)

    // Request
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }

    // Close response
    defer resp.Body.Close()

    // Getting the response from the server
    bodyText, err := ioutil.ReadAll(resp.Body)
    fmt.Printf("response:%s", bodyText)

    var myvar StructureJson // we create an empty instance of StructureJson
    err = json.Unmarshal([]byte(bodyText), &myvar)
    if err != nil {
        panic(err)
    }

    // Return the JSON object
    return &myvar
}

答案1

得分: 1

根据评论,如果要改进该函数,可以包含err := json.NewDecoder(resp.Body).Decode(&myvar)并删除中间的bodyText缓冲区:

// 获取HTTP状态码
func StatusF(url string, token string) *statusf {
    // 设置请求
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("Authorization", token)

    // 发送请求
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }

    // 关闭响应
    defer resp.Body.Close()

    var myvar StructureJson // 创建一个空的StructureJson实例
    err := json.NewDecoder(resp.Body).Decode(&myvar)
    if err != nil {
        panic(err)
    }

    // 返回JSON对象
    return &myvar
}
英文:

According to the comments if I want to improve the function I can include err := json.NewDecoder(resp.Body).Decode(&myvar) and delete the intermediate bodyText buffer:

// Getting HTTP Status code
func StatusF (url string, token string) *statusf {
    // Setup req
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("Authorization", token)

    // Request
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }

    // Close response
    defer resp.Body.Close()

    var myvar StructureJson // we create an empty instance of StructureJson
    err := json.NewDecoder(resp.Body).Decode(&myvar)
    if err != nil {
        panic(err)
    }

    // return the JSON object
    return &myvar
}

huangapple
  • 本文由 发表于 2022年8月4日 15:46:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/73232160.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定