一些已知的情况
在Golang语言中,一个变量赋值/使用前,需要声明变量的类型。例如:
var a int
a = 10
fmt.Printf("%d\n", a)
使用另一种形式:=
也可以对变量进行隐式的声明。例如:
a := 10
fmt.Printf("%d\", a)
对于一个变量,可以赋值多次,但是只能声明一次,不能重复。例如:
a := 10
a := 100
b := 10
b := "10"
这些重复声明都会报错:
Line 5: Char 10: no new variables on left side of :=
但是如果有多个变量在:=
左侧的话,那么只要有一个变量还没有声明,这个语法就是正确的,下面的例子特别常见:
a, err := foo()
b, err := bar()
还有一种情况是作用域不同也是可以重复声明的。例如:
a := 1
fmt.Printf("%d\n", a)
if ... {
a := 2
fmt.Printf("%d\n", a)
}
fmt.Printf("%d\n", a)
这里,应该输出:
1
2
1
奇怪的情况
把上面几种情况组合一下:
a := 1
fmt.Printf("%d\n", a)
if ... {
a = 12
fmt.Printf("%d\n", a)
a, b := 2, 3
fmt.Printf("%d\n", a)
a = 13
fmt.Printf("%d\n", a)
}
fmt.Printf("%d\n", a)
这里输出的是:
1
12
2
13
12
这里竟然a
是会被重新声明!,因此可以看出:=
的意义,只要左侧变量可以被声明,那么就尽量让左侧变量声明。上面例子的写法其实非常的容易写错,解决的办法是提前声明b
。