3 回答
TA贡献1796条经验 获得超4个赞
您有两个名为 的变量response,一个在循环内,另一个在循环外。
这是一个演示相同问题的示例。
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)
}
这里的问题是您正在使用:=,默认情况下会创建一个新变量。
如果您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)
}
关于 go 行为方式的另一个注意事项是,如果您与已经存在的变量处于相同的范围内,那么它的工作方式会有所不同。
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条经验 获得超4个赞
使错误消失的一种方法是err
在循环外声明一个变量:
var err error
这样,您可以在循环内分配现有变量(而不是声明新变量)
for _, backoff := range backoffSchedule { response, err = client.Do(request) ^^^
确保这是您想要的,就像response
在循环之外,循环中分配的最后一个值一样。
TA贡献1810条经验 获得超4个赞
为了检测错误,也许您也可以为response变量添加一个 nil 检查。这可能是您的解决方案。对于等式。
if response== nil {
break
}
请分享您对这种情况的首选或发现的答案。
- 3 回答
- 0 关注
- 172 浏览
添加回答
举报