详解Golang编程中的常量与变量

2020-01-28 11:51:26刘景俊

变量可以初始化(分配初始值)在他们的声明。变量的类型是由编译器自动根据传递给它的值判断。初始化包括一个等号后跟一个常量表达式如下:

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