在声明使用全局作用域的变量时,要特别小心。
package main import "fmt" var name string = "恋码" func setLocalName() { name := "码农" // :=相当于在local范围内重新声明一个name,对全局name无作用 fmt.Println(name) } func setName() { name = "hhb" // =为全局name赋值 fmt.Println(name) } func main() { setLocalName() setName() fmt.Println(name) }
执行:
码农
hhb
hhb
具体的差别,看=、:=两个运算符的文档。当你声明一个全局变量,想在某个函数里进行初始化时,若是在该函数内使用了:=运算符,就达不到预期,之后到了正式使用该变量时,会有空指针或者访问了无效内存等错误。
:=只能用在函数作用域内,而=可以任意,:=是对var arg type = value的快捷方式。