英文:
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
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论