Http 戈朗-什么';检查错误和延迟操作的正确顺序是什么?

Http 戈朗-什么';检查错误和延迟操作的正确顺序是什么?,http,go,Http,Go,我是新来的。如果我正在执行HTTP get请求,请执行以下操作: resp, err := http.Get("https://www.google.com") 现在我需要检查err是否为nil和defer resp.Body.Close()。执行这两个操作的正确顺序是什么?您需要在调用Get后立即检查错误。如果Get失败,resp将设置为nil。这意味着,resp.Body将生成运行时nil指针解引用错误 resp, err := http.Get("https://www.google.c

我是新来的。如果我正在执行HTTP get请求,请执行以下操作:

resp, err := http.Get("https://www.google.com")

现在我需要检查
err
是否为nil和
defer resp.Body.Close()
。执行这两个操作的正确顺序是什么?

您需要在调用
Get
后立即检查错误。如果
Get
失败,
resp
将设置为
nil
。这意味着,
resp.Body
将生成运行时
nil指针解引用
错误

resp, err := http.Get("https://www.google.com")
if err != nil {
    // process error
    return err
}
defer resp.Body.Close()

我不认为这有什么区别,因为最后的决定被推迟了。首先检查错误,然后推迟关闭似乎是惯用做法。@Sridhar:这是错误的!如果出错=nil then resp==nil,在这种情况下,延迟的Body.Close()会惊慌失措。很可能你是对的,只是尝试了一下。显然,我从未遇到过这种情况,因为我会立即处理所有错误:)