原文:https://golang.org/ref/spec#The_zero_value


The 零值


当一个变量或者新值被创建时, 如果没有为其明确指定初始值,go语言会自动初始化其值为此类型对应的零值, 各类型零值如下:

false : bool, 0: integer, 0.0: float, "": string, nil : pointer, function, interface, slice, channel, map 。对于复合类型, go语言会自动递归地将每一个元素初始化为其类型对应的零值。
比如:数组, 结构体 。 

原文:
newmakefalse00.0""nil


These two simple declarations are equivalent(以下两处声明是等价的):

var i int
var i int = 0

After

type T struct { i int; f float64; next *T }
t := new(T) //A

the following holds: //C

t.i == 0
t.f == 0.0
t.next == nil

The same would also be true after(注意:A与B两种变量创建方式,但是其每一个元素都被go自动初始化其类型对应零值, 等同于C)

var t T //B

    nil 是专门为go语言的指针类型和引用类型准备的,这样好记,哈哈;最后提醒一句:go语言的数组和结构体可是值类型, 并非引用类型哟, 比如数组作为函数参数时,

因为是值类型, 所以要复制的哟, 如果数组中元素很多, 那复制代价就大了呢, 要注意呀!


注意: 我是C++菜鸟程序员, 一毕业入行就用C++多年, 能力不见得强, 但是养成了刨根的毛病, 程序写的好不好, 大面的东西大家都差不多,但对于这些细节的东西

往往不注意, 隐藏bug就多, go语言虽然以简洁易学强大得名,但是还是要细节上多注意, 以免掉坑。 好比C++指针零值:0, NULL, nullptr 就是其零值不统一,很容易出bug.

 

注意: 此文章只是我个人笔记, 如有错漏,请一定指正, 共同学习, 我的邮箱: htyu_0203_39@sina.com