变量声明和定义的区别
变量声明
变量声明是指告诉编译器变量的类型和名称,但不为其分配内存或初始化值。在 Go 中,变量声明通常使用 var
关键字。
1var x int
在这个例子中,x
被声明为一个 int
类型的变量,但此时 x
并没有被赋予任何初始值。Go 会为 x
分配内存,并将其初始化为 int
类型的零值(即 0
)。
变量定义
变量定义是指在声明变量的同时为其分配内存并赋予初始值。在 Go 中,变量定义可以使用 var
关键字,也可以使用短变量声明 :=
。
1var x int = 10 // x 被声明为一个 int 类型的变量,并且被初始化为 10
2x := 10 // x 被声明并初始化为 10,Go 会根据初始值自动推断 x 的类型为 int
区别总结
- 变量声明:只声明变量的类型和名称,不赋予初始值。变量会被初始化为该类型的零值。
- 变量定义:声明变量的类型和名称,并赋予初始值。变量会被初始化为指定的值。
特性 | C语言 | Go语言 |
---|---|---|
声明与定义分离 | 严格区分声明和定义(extern vs 直接定义) | 声明和定义通常合二为一 |
变量初始化 | 声明时不初始化,定义时可以初始化 | 声明时可以不初始化(赋零值),定义时必须初始化 |
类型推断 | 不支持类型推断 | 支持类型推断(使用 := ) |
全局变量 | 使用 extern 声明全局变量 | 直接使用 var 声明全局变量 |
零值初始化 | 未初始化的全局变量为零值,局部变量为未定义值 | 所有未初始化的变量都为零值 |