1 Go中的变量
Go中变量指定了某存储单元的名称,该存储单元会存储特定类型的值,在Go中,有多种语法用于声明变量。
2 声明一个变量
语法
//关键字 变量名 变量类型
var name type
测试
package main
import "fmt"
func main() {
var age int // 定义一个int类型的变量
age = 12 // 变量赋值
var name string // 定义一个string类型的变量
name = "张三" // 变量赋值
fmt.Println("姓名:", name, "年龄:", age) // 姓名: 张三 年龄: 12
}
如果变量声明后没有进行初始化,Go会默认将其赋值为0
package main
import "fmt"
func main() {
//var age int
//age = 12
//var name string
//name = "张三"
//fmt.Println("姓名:", name, "年龄:", age) // 姓名: 张三 年龄: 12
var count int
fmt.Println(count) // 0
var str string
fmt.Println(str) // 空
var avg float32
fmt.Println(avg) // 0
}
3 声明变量并初始化
语法
//关键字 变量名 变量类型 = 初始化值
var name type = value
测试
package main
import "fmt"
func main() {
// 声明变量并初始化
var age int = 10
fmt.Println(age)
// 修改变量值
age = 11
fmt.Println("我长大了:", age)
}
4 变量推断
如果定义的变量有初始化值,则不用定义变量类型,Go会自动推断变量的类型
语法
// 关键字 变量名 = 初始化值
var age = 11
// 省略了age变量的类型int
测试
package main
import "fmt"
func main() {
var age = 10
fmt.Println("age is :", age) // age is : 10
}
5 声明多个变量
5.1 多个变量相同类型
语法
var a,b int // 声明变量
a = 1
b = 2
测试
package main
import "fmt"
func main() {
var height, weigth int
height = 180
weigth = 60
fmt.Println("身高:", height, "cm", "体重:", weigth, "kg") // 身高: 180 cm 体重: 60 kg
}
5.2 多个变量不同类型
语法
var (
name1 type1
name2 type2
)
测试
package main
import "fmt"
func main() {
var (
name string
age int
height float32
weight float32
)
name = "张三丰"
age = 104
height = 175.8
weight = 69.6
fmt.Println("姓名:", name, "年龄:", age, "身高:", height, "体重:", weight)
// 姓名: 张三丰 年龄: 104 身高: 175.8 体重: 69.6
}
6 简短声明
Go语言支持对未初始化的变量进行简短声明。
语法
// 变量名 := 初始化值
name := initialvalue
测试
package main
import "fmt"
func main() {
age := 11
fmt.Println("age is :", age) // age is : 11
}
:= 符号左边的值必须都有初始化值,否则报错
package main
import "fmt"
func main() {
name, age := "张三丰" // 报错 assignment mismatch: 2 variables but 1 value
fmt.Println("name is :", name)
}
:= 符号左边的变量个数与右边的初始化值的个数一定要相同
package main
import "fmt"
func main() {
name, age := "张三丰", 11
fmt.Println("name is :", name, "age is :", age)
// name is : 张三丰 age is : 11
}
简短声明:=左侧必须包含一个未初始化的变量
package main
import "fmt"
func main() {
var a = 10
a, b := 11, 12 // 因为b是未初始化的,所以不报错
fmt.Println(a, b) // 11,12
}
如果简短声明:=左侧都是初始化的,则会报错
package main
import "fmt"
func main() {
var a, b = 10, 11
a, b := 11, 12 // no new variables on left side of :=
fmt.Println(a, b)
}
go给出的报错信息还是很清晰的
7 Go语言变量不能把一种类型赋值给其他类型
Go是强类型语言,不能将类型a的变量赋值为类型b的值
package main
import "fmt"
func main() {
a, b := 11, 12
a = "kevin" // cannot use "kevin" (untyped string constant) as int value in assignment
fmt.Println(a, b)
}