Golang抱怨for循环中未使用的变量

我在 golang 的 for 循环中有一个未使用的变量。


我实际上是在 for 循环之外使用它。


Goland 一直抱怨未使用的变量。


我该如何解决?


var backoffSchedule = []time.Duration{

    1 * time.Second,

    3 * time.Second,

    10 * time.Second,

}

var response *http.Response


for _, backoff := range backoffSchedule {

    response, err := client.Do(request)

    if err == nil {

        break

    }

    fmt.Printf(os.Stderr, "Request error: %s", err)

    fmt.Printf(os.Stderr, "Retrying in %s", backoff)

    time.Sleep(backoff)


}


if err != nil {

    fmt.Printf("CRITICAL: API request failed: %s", err)

    os.Exit(2)

}


if response.StatusCode <= 199 || response.StatusCode >= 300 {

    // Non-successful response, alert

    fmt.Printf("CRITICAL: APIv request returned not ok: %s", response.Status)

    os.Exit(2)

http://img4.mukewang.com/6344034f0001a7ec09120468.jpg

它还抱怨未引用的变量err。如何使它们在函数内可用。



富国沪深
浏览 173回答 3
3回答

慕的地8271018

您有两个名为 的变量response,一个在循环内,另一个在循环外。这是一个演示相同问题的示例。package mainimport (&nbsp; &nbsp; "fmt")func foo() (int, error) {&nbsp; &nbsp; return 10, nil}func main() {&nbsp; &nbsp; someValue := 5&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if (someValue == 5) {&nbsp; &nbsp; &nbsp; &nbsp; someValue, err := foo()&nbsp; &nbsp; &nbsp; &nbsp; if (err == nil) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("Inside if scope:", someValue)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; fmt.Print("Outside if scope:", someValue)}这里的问题是您正在使用:=,默认情况下会创建一个新变量。如果您err在范围之外声明并使用=您的代码将起作用。package mainimport (&nbsp; &nbsp; "fmt")func foo() (int, error) {&nbsp; &nbsp; return 10, nil}func main() {&nbsp; &nbsp; someValue := 5&nbsp; &nbsp; var err error&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if (someValue == 5) {&nbsp; &nbsp; &nbsp; &nbsp; someValue, err = foo()&nbsp; &nbsp; &nbsp; &nbsp; if (err == nil) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("Inside if scope:", someValue)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; fmt.Print("Outside if scope:", someValue)}关于 go 行为方式的另一个注意事项是,如果您与已经存在的变量处于相同的范围内,那么它的工作方式会有所不同。package mainimport (&nbsp; &nbsp; "fmt")func foo() (int, error) {&nbsp; &nbsp; return 10, nil}func main() {&nbsp; &nbsp; someValue := 5&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; fmt.Println("Before foo:", someValue)&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; someValue, err := foo()&nbsp; &nbsp; if (err == nil) {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Print("After foo:", someValue)&nbsp; &nbsp; }}在这里,我们分配给相同的变量并同时someValue声明一个新变量。err:=

SMILET

使错误消失的一种方法是err在循环外声明一个变量:var&nbsp;err&nbsp;error这样,您可以在循环内分配现有变量(而不是声明新变量)for&nbsp;_,&nbsp;backoff&nbsp;:=&nbsp;range&nbsp;backoffSchedule&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;response,&nbsp;err&nbsp;=&nbsp;client.Do(request) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^^^确保这是您想要的,就像response在循环之外,循环中分配的最后一个值一样。

蝴蝶不菲

为了检测错误,也许您也可以为response变量添加一个 nil 检查。这可能是您的解决方案。对于等式。if response== nil {&nbsp; &nbsp; break}请分享您对这种情况的首选或发现的答案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go