赋值运算符=,:=和变量作用域

在声明使用全局作用域的变量时,要特别小心。

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的快捷方式。

原文地址:https://www.cnblogs.com/thingk/p/7469550.html