/

Go是怎么声明变量的?

该篇文章首发于boyn.top,转载请声明.封面图来自<>

Go是如何声明变量的?

要是有Java的同学,一定知道,Java所有对象的创建语句都是通过new来进行的.Java的对象通过new,进行类的加载(可选),堆内存分配,赋零值,解析,赋初始值这样的一个过程.

而Go语言也有变量声明这个操作,但是在学习Go语言时,我发现它与Java十分不同的一点就是,Go的变量可以有许多不同的声明方式,比如

  1. 可以通过结构体类型后面带上{}并声明其若干域的初始值(或者不带).
  2. 可以通过new(type)这个内置函数,来声明一个变量,其所有成员变量的值都是其类型的零值
  3. 可以直接声明,比如常见的mu sync.Mutex
  4. 还有一些类型如slice,map,chan,可以通过make()函数来进行声明

零值类型

变量的声明,都有一个共同的特点,就是他们的被初始赋值的时候,都是零值.也就是说,在开辟了一段内存空间之后,并不会对内存进行变量初始化,而是将内存中的位设为0.这个特性,就是零值属性.

零值类型有什么好处呢?相比起对一个变量进行初始化,在声明的时候只需要写出类型名字完成声明会更具有表达力.

比如var b bytes.Buffervar mu sync.Mutex这样的变量,在声明的时候就已经分配好内存就绪了.

new函数

与Java的new函数不同,Go语言的new函数并不能给变量进行赋初始值,而是只会开辟一段内存空间并赋零值给所有成员变量,然后返回该变量的引用

make函数

与new函数不同,make函数只对少数的Go语言内建类型有用,比如slice,map和chan

大括号声明

在Go中,可能使用最多的声明方式就是大括号声明了,包括空的大括号和含值大括号,使用大括号来进行赋值是很好的,可以自定义要初始化哪些值

工厂模式

在Go中,可以使用package级别的New函数来进行变量的初始化.

关于图片和转载

知识共享许可协议
本作品采用知识共享署名 4.0 国际许可协议进行许可。 转载时请注明原文链接,图片在使用时请保留图片中的全部内容,可适当缩放并在引用处附上图片所在的文章链接,图片使用 Sketch 进行绘制,你可以在 技术文章配图指南 一文中找到画图的方法和素材。