package main
import "fmt"
func main() {
var age int // 变量声明
fmt.Printf("my age is %d\n", age)
}
使用Go Playground在线运行。
前面的语句var age int声明了一个int类型的变量age,但是并没有给该变量赋值。在Golang中,如果一个变量声明时未手动赋值,Golang会自动将该变量初始化为对应类型的零值(注意每种类型都有其独特的零值,比如int类型的零值为0)。这里由于age声明为了int类型,因此Golang自动将该变量初始化为0。运行该程序会输出如下结果:
my age is 0
我们可以给某种类型的变量赋予该类型的任何值,比如这里的age变量,我们可以赋予任何大小的整数值:
package main
import "fmt"
func main() {
var age int // 变量声明
fmt.Printf("my age is %d\n", age)
age = 29 // 给age变量赋值
fmt.Printf("my age is %d\n", age)
age = 54 // 给age变量赋另一个值
fmt.Printf("my age is %d\n", age)
}
该程序输出如下:
my age is 0
my age is 29
my age is 54
变量声明的同时赋初值
变量声明的同时可以赋初值,语法如下:var name type = initialvalue。
package main
import "fmt"
func main() {
var age int = 29 // 变量声明并赋初值
fmt.Printf("my age is %d\n", age)
}
这段程序中变量age被声明为int类型,同时被赋予了初值29,输出如下:
my age is 29
类型推断
如果一个变量声明的同时并进行了赋值,那么Golang可以自动根据赋予的初值来推断出变量的类型,因此这种情况下声明变量时可以将声明语句var type name = initalvalue中的type字段省掉,变为如下形式:var name = initialvalue。
package main
import "fmt"
func main() {
var (
name = "naveen"
age = 29
height int
)
fmt.Println("my name is", name, ", age is", age, "and height is", height)
}
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
切记,变量声明简写形式要求所有声明的变量都在:=右侧手动赋予初值。下面的程序运行会报错:
assignment mismatch: 2 variable but 1 values
就是因为变量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 // declare variables a and b
fmt.Println("a is", a, "b is", b)
b, c := 40, 50 // b is already declared but c is new
fmt.Println("b is", b, "c is", c)
b, c = 80, 90 // assign new values to already declared variables b and c
fmt.Println("changed b is", b, "c is", c)
}
这段程序中语句b, c := 40, 50之所以合法是因为虽然变量b前面已声明过,但是变量c是新声明的变量,执行结果如下:
a is 20 b is 30
b is 40 c is 50
changed b is 80 c is 90
但是如果是下面的程序,则执行时会报错:
no new variables on left side of :=
是因为变量a,b前面均已声明过。
package main
import "fmt"
func main() {
a, b := 20, 30 //a and b declared
fmt.Println("a is", a, "b is", b)
a, b := 40, 50 //error, no new variables
}
Golang中变量赋值不仅可以赋予字面量值,还可以赋予运行时计算结果值。
package main
import (
"fmt"
"math"
)
func main() {
a, b := 145.8, 543.8
c := math.Min(a, b)
fmt.Println("minimum value is ", c)
}