golang中这些行代码相同吗?

Shi*_*hat 1 if-statement go conditional-statements

A 与 B 相同吗?

A

if err := json.NewDecoder(r.Body).Decode(&t); err != nil {
    rnd.JSON(w, http.StatusProcessing, err)
    return
}
Run Code Online (Sandbox Code Playgroud)

err := json.NewDecoder(r.Body).Decode(&t);
if err != nil {
    rnd.JSON(w, http.StatusProcessing, err)
    return
}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 6

除了一个区别之外,它们是等效的:变量的范围err。在 A 版本中,变量的范围err是这样if的语句:在if.

在 B 版本中,err变量也将在if语句之后的范围内,如果err之前已经定义了,则也可能导致编译时错误。

始终最小化变量的范围是一个很好的做法(这样可以减少误用它们的机会)。如果您不想进一步检查 后返回的错误if,最好使用 A 版本。如果您在 后确实需要它if,那么显然 B 版本是最佳选择。