【golang】短变量声明
在golang中可以很方便的用:=
来初始化一个变量
但是需要注意的是:=
是一个变量声明语句,而=
是一个赋值语句
因此你不能像赋值语句那样去使用它
j := 1
j := 2 //no new variables on left side of :=
简短变量声明语句只有对已经在同级词法域声明过的变量才和赋值操作语句等价,如果变量是在外部词法域声明的,那么简短变量声明语句将会在当前词法域重新声明一个新的变量
一个小例子
package main
import (
"fmt"
// "bufio"
// "os"
)
var pi int = 1
func main(){
pi := 3
fmt.Println(pi)
print() //打印包级作用域的pi
}
func print(){
fmt.Println(pi)
}
打印结果
3
1
可以看到的是print函数打印的pi仍然是1没有变动,原因是pi使用了短变量声明语句,那么会在当前的作用域重新创建一个新的变量pi,第一个打印的是局部的pi,第二个打印的是包级作用域的pi
如果将:=
换成=
呢?
package main
import (
"fmt"
// "bufio"
// "os"
)
var pi int = 1
func main(){
pi = 3
fmt.Println(pi)
print() //打印包级作用域的pi
}
func print(){
fmt.Println(pi)
}
打印结果
3
3
这下两个都是3了,原因是pi=3
是直接给外部的pi进行的赋值,第一次打印和第二次打印都是打印的外部的pi