情景1
这种情况下,已经有了cnt变量,用[:=]的话,就不用在外面定义err了,直接在代码处写即可,此时cnt变量就是var cnt int这个变量,cnt没有因为自动类型推导[:=]而变成新的变量
package main import "fmt" func main() { var cnt int cnt, err := Test() if err != nil { return } fmt.Println(cnt) } func Test() (int, error) { return 0, nil }
情景2
这种情况下,for有个大括号,可以看作 作用域,在for里面cnt, err := Test()
的cnt和var cnt int
是两个不同的变量,因为for的大括号多了个作用域
func main() { var cnt int for { cnt, err := Test() if err != nil { return } fmt.Println(cnt) } fmt.Println(cnt) } func Test() (int, error) { return 0, nil }
总结
若想在for中用外层的局部变量,又想赋值给err,干脆外层也定义一个err出来,这样内外用的都是同一个变量,用等号赋值即可
package main import "fmt" func main() { var cnt int var err error for { cnt, err = Test() if err != nil { return } fmt.Println(cnt) } fmt.Println(cnt) } func Test() (int, error) { return 0, nil }