3 回答

TA貢獻1796條經(jīng)驗 獲得超4個贊
您有兩個名為 的變量response,一個在循環(huán)內(nèi),另一個在循環(huán)外。
這是一個演示相同問題的示例。
package main
import (
"fmt"
)
func foo() (int, error) {
return 10, nil
}
func main() {
someValue := 5
if (someValue == 5) {
someValue, err := foo()
if (err == nil) {
fmt.Println("Inside if scope:", someValue)
}
}
fmt.Print("Outside if scope:", someValue)
}
這里的問題是您正在使用:=,默認情況下會創(chuàng)建一個新變量。
如果您err在范圍之外聲明并使用=您的代碼將起作用。
package main
import (
"fmt"
)
func foo() (int, error) {
return 10, nil
}
func main() {
someValue := 5
var err error
if (someValue == 5) {
someValue, err = foo()
if (err == nil) {
fmt.Println("Inside if scope:", someValue)
}
}
fmt.Print("Outside if scope:", someValue)
}
關(guān)于 go 行為方式的另一個注意事項是,如果您與已經(jīng)存在的變量處于相同的范圍內(nèi),那么它的工作方式會有所不同。
package main
import (
"fmt"
)
func foo() (int, error) {
return 10, nil
}
func main() {
someValue := 5
fmt.Println("Before foo:", someValue)
someValue, err := foo()
if (err == nil) {
fmt.Print("After foo:", someValue)
}
}
在這里,我們分配給相同的變量并同時someValue聲明一個新變量。err:=

TA貢獻1796條經(jīng)驗 獲得超4個贊
使錯誤消失的一種方法是err
在循環(huán)外聲明一個變量:
var err error
這樣,您可以在循環(huán)內(nèi)分配現(xiàn)有變量(而不是聲明新變量)
for _, backoff := range backoffSchedule { response, err = client.Do(request) ^^^
確保這是您想要的,就像response
在循環(huán)之外,循環(huán)中分配的最后一個值一樣。

TA貢獻1810條經(jīng)驗 獲得超4個贊
為了檢測錯誤,也許您也可以為response變量添加一個 nil 檢查。這可能是您的解決方案。對于等式。
if response== nil {
break
}
請分享您對這種情況的首選或發(fā)現(xiàn)的答案。
- 3 回答
- 0 關(guān)注
- 236 瀏覽
添加回答
舉報