02-Go 保留字之 iota

简介

在 Go 中,var 关键字用于声明变量。通过使用 var,你可以定义一个或多个变量的类型和初始值。

Go 语言支持多种变量声明的语法,每种语法都有其特定的用途和适用场景。

语法

1
var 变量名 [类型] [=] [初始值]

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 单个变量声明并初始化
var name string = "John"


// 单个变量声明,不初始化(自动初始化为零值,可以看后面的示例)
var name string


// 多个变量声明并初始化
var name, age string = "John", "30"


// 多个变量声明,不初始化
var name, age string


// 同时声明多个不同类型的变量
var (
name string = "John"
age int = 30
done bool = true
)

类型推断(Type Inference)

Go 语言支持类型推断,即如果你在声明变量时提供了初始值,编译器可以自动推断出变量的类型。这使得代码更加简洁。

1
2
var name = "John" // 类型为string,由初始值推断得出
var age = 30 // 类型为int,由初始值推断得出

初始化时未指定初始值

在 Go 中,使用 var 关键字声明变量时,如果未显式指定初始值,系统会自动初始化变量的默认值‌。

  • 数值类型的变量会被初始化为 0。
  • 字符串类型的变量会被初始化为空字符串””。
  • 布尔类型的变量会被初始化为false。
  • 指针、切片、映射和函数类型的变量会被初始化为nil。
  • 结构体类型的变量会被初始化为零值,即所有字段都被初始化为对应类型的零值‌。

初始化示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//数值类型
var num int = 0


//字符串类型
var str string = ""


//布尔类型
var isTrue bool = false


//指针类型
var ptr *int = nil


//切片类型
var slice []int = []int{}


//映射类型
var mapMap map[string]int = make(map[string]int)


//函数类型
var funcType func() = func() {}


// struct
type object struct {
age int
}

o := object{}
fmt.Println(o) {0}

短变量声明(Short Variable Declaration)

对于函数内部,可以使用更简洁的 := 语法来声明并初始化变量,这种方式称为“短变量声明”。这种方式只能在函数内部使用,因为它依赖于函数级别的词法块来自动确定变量的作用域。

1
2
name := "John"  // 自动推断类型为
stringage := 30 // 自动推断类型为int

注意事项

  • 使用 var 关键字声明的变量在包级别时,其作用域为整个包;在函数内部时,其作用域为当前函数。
  • 使用 := 进行短变量声明时,只能在函数内部使用,且编译器会自动推断变量的类型。
  • 如果你在包级别使用 :=,将会导致编译错误,因为包级别的变量不能使用 := 语法。
  • 在函数内部,如果需要重新声明一个已经在外部声明的同名变量,可以使用 := 但这通常是避免的,因为这样可以减少代码的清晰度。通常最好使用不同的变量名或者重新利用已有的变量。

通过合理使用 var:=,你可以根据不同的场景选择最适合的变量声明方式。


02-Go 保留字之 iota
https://flepeng.github.io/021-Go-31-Go-关键字-Go-保留字之-var/
作者
Lepeng
发布于
2024年12月1日
许可协议