Go 定义变量有四种写法:var 显式声明、var 带初始化、:= 简短声明、var (...) 批量声明。没显式初始化的一律给零值。
变量的定义
使用
var关键字显式声明:- 这是最基本的变量声明方式。
- 需要指定变量的名称和类型。
例如:
govar age int var name string var isActive bool fmt.Println(age, name, isActive)使用
var关键字声明并初始化:- 在声明变量的同时进行初始化。
- 编译器会自动推断变量的类型。
例如:
govar age int = 30 var name string = "Alice" var isActive bool = true fmt.Println(age, name, isActive)简短变量声明(
:=):- 在函数内部可以使用
:=进行简短变量声明。 - 编译器会根据右侧的值自动推断变量的类型。
- 这种方式不能在函数外部(包级作用域)使用。
例如:
goage := 30 name := "Alice" isActive := true fmt.Println(age, name, isActive)- 在函数内部可以使用
批量声明:
- 使用
var关键字可以批量声明多个变量。 - 可以在声明的同时进行初始化。
例如:
gopackage main import "fmt" func main() { var ( age int = 30 name string = "Alice" isActive bool = true ) fmt.Println(age, name, isActive) }- 使用
变量的初始化
在 Go 中,变量在声明时可以进行初始化。如果没有显式初始化,变量会被赋予其类型的零值。
零值初始化:
- 当变量声明后没有显式初始化时,Go 会为其赋予零值。
- 不同类型的零值:
- 数值类型(包括整数、浮点数):0
- 布尔类型:false
- 字符串类型:空字符串 ""
- 指针、函数、接口、切片、通道和映射:nil
例如:
govar age int // 零值为 0 var name string // 零值为 "" var isActive bool // 零值为 false var pointer *int // 零值为 nil fmt.Println(age, name, isActive, pointer)显式初始化:
- 在声明变量时可以显式地进行初始化。
例如:
govar age int = 30 var name string = "Alice" var isActive bool = true var pointer *int = nil fmt.Println(age, name, isActive, pointer)简短变量声明初始化:
- 使用简短变量声明可以在声明的同时进行初始化。
例如:
goage := 30 name := "Alice" isActive := true fmt.Println(age, name, isActive)
示例代码
以下是一个示例代码,展示了变量的定义和初始化方式:
go
package main
import "fmt"
func main() {
// 使用 var 关键字显式声明
var age int
var name string
var isActive bool
// 打印零值
fmt.Println("Age:", age) // 0
fmt.Println("Name:", name) // ""
fmt.Println("Is Active:", isActive) // false
// 使用 var 关键字声明并初始化
var age2 int = 30
var name2 string = "Alice"
var isActive2 bool = true
// 打印初始化值
fmt.Println("Age2:", age2) // 30
fmt.Println("Name2:", name2) // Alice
fmt.Println("Is Active2:", isActive2) // true
// 简短变量声明
age3 := 25
name3 := "Bob"
isActive3 := false
// 打印初始化值
fmt.Println("Age3:", age3) // 25
fmt.Println("Name3:", name3) // Bob
fmt.Println("Is Active3:", isActive3) // false
// 批量声明
var (
age4 int = 40
name4 string = "Charlie"
isActive4 bool = true
)
// 打印初始化值
fmt.Println("Age4:", age4) // 40
fmt.Println("Name4:", name4) // Charlie
fmt.Println("Is Active4:", isActive4) // true
}总结
四种写法差别在使用位置:var 能用在包级,:= 只能在函数内部,批量声明把一组相关变量放在一起。零值机制保证变量一声明就有确定值,不会出现"未初始化"这种坑。