变量可以初始化(分配初始值)在他们的声明。变量的类型是由编译器自动根据传递给它的值判断。初始化包括一个等号后跟一个常量表达式如下:
variable_name = value;
一些实例是:
d = 3, f = 5; // declaration of d and f. Here d and f are int
对于没有初始化定义:具有静态存储时间变量的隐含零初始化(所有字节的值为0);所有其它变量的初始值是它们的数据类型的零值。
静态类型声明
静态类型的变量声明保障到编译器,有一个变量存在具有给定类型和名称,这样编译器进行进一步的编辑,而不需要对变量的完整细节。变量声明有其意义在编译时止,编译器需要实际的变量声明在链接程序时。
示例
试试下面的例子,其中变量已经被声明为有型,并且已被定义及主要函数内部初始化:
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %Tn", x)
}
让我们编译和运行上面的程序,这将产生以下结果:
20
x is of type float64
动态类型声明/类型推断
动态类型变量声明要求编译器解释的基础上传递给它值变量的类型。编译器不需要一个变量静态有类型的必然要求。
示例
试试下面的例子,其中的变量已经声明没有任何类型的,并已确定在主函数中初始化。如果类型推断的,我们已经初始化的变量y使用:=运算符,x初始化使用=运算符。
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %Tn", x)
fmt.Printf("y is of type %Tn", y)
}
让我们编译和运行上面的程序,这将产生以下结果:
20
42
x is of type float64
y is of type int
混合变量声明
不同类型的变量可以一步到位使用类型推断声明。
例子
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %Tn", a)
fmt.Printf("b is of type %Tn", b)
fmt.Printf("c is of type %Tn", c)
}
让我们编译和运行上面的程序,这将产生以下结果:
3
4
foo
a is of type int
b is of type int
c is of type string









