1:变量是什么
变量是程序运行过程中存储数据的抽象概念,它的值是允许改变的,在 Go 中,有多种语法用于声明变量
2:声明单个变量
语法:var name type
package main
import "fmt"
func main() {
var age int
fmt.Println("my age is",age)
}
语句 var age int 声明了一个 int 类型的变量,名字为 age。我们还没有给该变量赋值。如果变量未被赋值,Go 会自动地将其初始化,赋值该变量类型的零值(Zero Value)
运行后会看到如下输出:
my age is 0
age变量可被赋值位任何整型值
package main
import "fmt"
func main() {
var age int // 变量声明
fmt.Println("my age is", age)
age = 11 // 赋值
fmt.Println("my age is", age)
age = 22 // 赋值
fmt.Println("my new age is", age)
}
输出:
my age is 0
my age is 11
my new age is 22
声明变量并初始化
package main
import "fmt"
func main() {
var age int = 22 // 声明变量并初始化
fmt.Println("my age is", age)
}
输出:
my age is 22
3:类型推断
如果变量有初始值,那么 Go 能够自动推断具有初始值的变量的类型。因此,如果变量有初始值,就可以在变量声明中省略 type。如果变量声明的语法是 var name = initialvalue,Go 能够根据初始值自动推断变量的类型。在下面的例子中,我们省略了变量 age 的 int 类型,Go 依然推断出了它是 int 类型
package main
import "fmt"
func main() {
var age = 22 // 可以推断类型
fmt.Println("my age is", age)
}
4:声明多个变量
Go 能够通过一条语句声明多个变量。
声明多个变量的语法是 var name1, name2 type = initialvalue1, initialvalue2
package main
import "fmt"
func main() {
var w, h int = 11, 22 // 声明多个变量
fmt.Println("w is", w, "h is", h)
}
在有些情况下,我们可能会想要在一个语句中声明不同类型的变量。其语法如下:
var (
name1 = initialvalue1,
name2 = initialvalue2
)
下面的程序声明不同类型的变量
package main
import "fmt"
func main() {
var (
name = "test"
age = 18
height int
)
fmt.Println("my name is", name, ", age is", age, "and height is", height)
}
这里我们声明了 string 类型的 name、int 类型的 age 和 height
输出
my name is test , age is 18 and height is 0
5:简短声明
Go 也支持一种声明变量的简洁形式,称为简短声明(Short Hand Declaration),该声明使用了 := 操作符。
声明变量的简短语法是 name := initialvalue
package main
import "fmt"
func main() {
name, age := "test", 18 // 简短声明
fmt.Println("my name is", name, "age is", age)
}
输出
my name is test , age is 18
简短声明的语法要求 := 操作符的左边至少有一个变量是尚未声明的。
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 // 错误,没有尚未声明的变量
}
6:强类型
Go 是强类型(Strongly Typed)语言,因此不允许某一类型的变量赋值为其他类型的值,下面的程序会抛出错误 cannot use “naveen” (type string) as type int in assignment,这是因为 age 本来声明为 int 类型,而我们却尝试给它赋字符串类型的值
package main
func main() {
age := 11 // age是int类型
age = "naveen" // 错误,尝试赋值一个字符串给int类型变量
}