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