Go还提供了另一种声明变量的简洁方法。这就是所谓的简洁声明,使用:=
操作符。语法如下:
name:= initialvalue
示例
package main
import "fmt"
func main() {
name, age := "naveen", 29 // 简洁声明
fmt.Println("my name is", name, "age is", age)
}
输出:
my name is naveen age is 29
简洁声明要求全部变量必须有初始值。下面的程序将抛出一个错误,不能把一个值分配给两个变量。这是因为age
没有被赋值。
package main
import "fmt"
func main() {
name, age := "naveen" //error
fmt.Println("my name is", name, "age is", age)
}
只有当:=
左边的至少一个变量是新声明的时候,才可以使用简写语法。考虑下面的程序,
package main
import "fmt"
func main() {
a, b := 20, 30 // 声明变量a和b
fmt.Println("a is", a, "b is", b)
b, c := 40, 50 // b已经声明了,但是c是新的
fmt.Println("b is", b, "c is", c)
b, c = 80, 90 // 为已经声明的变量b和c分配新值
fmt.Println("changed b is", b, "c is", c)
}
输出:
a is 20 b is 30
b is 40 c is 50
changed b is 80 c is 90
但是如果我们运行下面的程序,
package main
import "fmt"
func main() {
a, b := 20, 30 // a和b已经声明
fmt.Println("a is", a, "b is", b)
a, b := 40, 50 //error, 没有新的变量
}
这是因为变量a和b都已经声明了,在:=
的左边没有新变量。
还可以为在运行时计算的变量赋值。考虑下面的程序,
package main
import (
"fmt"
"math"
)
func main() {
a, b := 145.8, 543.8
c := math.Min(a, b)
fmt.Println("minimum value is ", c)
}
在上面的程序中,c的值是在运行时计算的,是a和b的最小值。上面的程序会打印出:
minimum value is 145.8
因为Go是强类型的,所以一种类型的变量不能赋值给另一种类型。
下面的程序将抛出一个错误:cannot use "naveen" (type string) as type int in assignment
,因为age
声明为类型int
,我们试图把一个字符串值赋给它。
package main
func main() {
age := 29 // age 是 int 类型
age = "naveen" // 错误,因为我们试图将字符串分配给int类型的变量
}