Go 语言入门指南:聊聊Go静态变量声明 | 青训营

285 阅读3分钟

静态变量vs动态变量

何为变量?

在编程语言中,为了方便操作内存特定位置的数据,我们用一个特定的名字与位于特定位置的内存块绑定在一起,这个名字被称为变量。而学习静态语言有别于动态语言的一个重要特征:变量声明

动态语言与静态语言处理变量方式

动态语言(比如Python等)的解释器可以在运行时通过对变量赋值的分析,自动确定变量的边界。

静态类型语言编译器必须明确知道一个变量的边界才允许使用这个变量,通过变量声明,语言使用者可以显式告知编译器一个变量的边界信息。

而身为静态语言的Go,就需要使用变量之前先进行变量声明

Go中的通用变量声明方法

var g int = 1

var 是声明变量关键字

g 是变量名

int 是变量类型

1 是值

可以看出,go声明变量方式与其他编程语言大有不同,他将类型放在变量名后面。这样做的好处就是,如果我们没有显示为变量赋初值,go会帮我们为变量赋零值。

go 零值对应表

内置类型零值
整数0
浮点0.0
布尔false
字符串""
切片、map、func、接口、chan、指针nil

除了单个变量类型定义,还可以定义一个var变量块

var (
    a int = 10
    b string = "hello world"
    c bool = true
)

注意:块级声明,要把形式一样的变量声明放入一个块中,提高代码可读性,

go还支持一行定义多个变量

   var a,b,c int = 1,2,3

go 包级和局部变量声明方式

包级变量

显式声明和初始化

var err = errors.New("error occur")

这个代码声明,引入了errors包,省略了类型信息,go会自动推导变量类型,这个类型是结果对应类型的默认类型。

还有显式为包级变量指定类型,这里有两种方式:

// 第一种方式
var a int = 10
// 第二种
var a = int(10)

两种都可以使用,但是针对声明一致性,第二种更清晰,一致。

延迟声明初始化

针对声明但是没有显式初始化包级变量,可以使用:

var a int

这种声明,go会自动赋予变量零值,达到变量可用。

局部变量

局部变量与包级变量相比较,多了一种短变量声明形式,也是开发中采用最多的一种声明形式。与之对应,包级变量中不可以使用短变量形式,这是局部变量特有声明方式。

延迟初始化局部变量,用通用变量声明形式 对于省略类型信息和短变量声明形式,都不支持延迟初始化声明,所以局部变量与包级变量一样,只能使用通用变量声明方式,如下:

var err error

显示化声明初始化变量,使用短变量形式

短变量声明是局部变量最常用声明方式,所以在局部变量中,我们通常采用短变量,如下:

a := 10

对于不接受默认类型的变量,需要在右侧做一个显示转换,保持声明的一致性

a := int64(555)

小结

具体来说,Go 语言提供了一种通用变量声明形式以及两种变量声明形式,及var关键字和短变量,而且 Go 包级变量和局部变量会根据具体情况选择不同的变量声明形式,在实践过程中,我们还要注意遵循就近原则,即在第一次使用变量的地方声明变量。