变量声明和定义的区别

变量声明

变量声明是指告诉编译器变量的类型和名称,但不为其分配内存或初始化值。在 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 声明全局变量
零值初始化未初始化的全局变量为零值,局部变量为未定义值所有未初始化的变量都为零值