考虑以下说明问题的示例(它只是为了解释问题而构建的,但我在书中也看到了类似的代码在实际项目中):
package main
import (
"strconv"
"fmt"
"log"
)
func main() {
n1, err := strconv.Atoi("1")
if err != nil {
log.Panicf("%v", err)
}
n2, err := strconv.Atoi("2")
if err != nil {
log.Panicf("%v", err)
}
// err := fmt.Errorf("new error") <- line 1
// n1, err := strconv.Atoi("3") <- line 2
fmt.Printf("n1 = %d, n2 = %d\n", n1, n2)
}
编译器不会抱怨重新定义err,但如果我取消注释<- line 1或<- line 2,它会抱怨no new variable on left side of :=。
那么它是怎样工作的?为什么编译器高兴地允许覆盖err多return语句,使用:=,而不是n1对<- line 2的例子吗?
如果您可以指向解释此行为的官方参考,那就更好了。
暮色呼如
相关分类