[go语言]初学者需要注意的问题-变量的作用域
package main
import "fmt"
func main() {
a, b := 1, 2
b, c := 3, 4
fmt.Println(a, b, c)
}
这里“b, c:= 3, 4”语句是给已有变量b赋值,同时把一个新变量c初始化为4,因此程序的输出结果是:
1 3 4
但是如果这行语句是在另外一个代码块里,效果就不一样了。
package main
import "fmt"
func main() {
a, b := 1, 2
if true {
b, c := 3, 4
fmt.Println(b, c)
}
fmt.Println(a, b)
}
这个程序输出的结果是:
3 4
1 2
说明"b, c := 3, 4"语句是初始化了两个新的变量,其中b和外部变量b重名。
所以结论是:
在同一个函数另外一个代码块,使用:=初始化多个变量时,外部同名变量被自动屏蔽。
这个问题还是挺容易遇到的,新手可能不知道,而老手也可能会不留神给忽略了,结果产生bug。如果能有编译警告就好一些,但是还不清楚有没有这样的编译选项。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。