[go语言]初学者需要注意的问题-变量的作用域

go语言支持多变量同时赋值或者初始化,这是一个很方便的特性。它也允许使用:=操作符同时声明部分新变量,并且给已有变量赋值,这会带来一些需要注意的问题,一不小心就产生bug。 看一段代码:

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。如果能有编译警告就好一些,但是还不清楚有没有这样的编译选项。

本文来自:新浪博客

感谢作者:stevewang

查看原文:[go语言]初学者需要注意的问题-变量的作用域

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。