背景
下栽地止:www.ubkz.com/t-3325.html
Go 言语中有一个有些特殊的概念,叫做零值。许多转言语的同窗经常会弄混杂,一开端会不顺应。
代码如下:
func main() { var i int var f float64 var b bool var s string fmt.Printf("%v %v %v %q\n", i, f, b, s) } 复制代码
输出结果:
0 0 false "" 复制代码
这会招致大家在定义各种数据库字段时比拟纠结,又会说 Go 这零值,例如:整形的零值 0,跟数据库里的 0 枚举值抵触。又或是做入参判别时怎样区别开?
一时半会想不明白,为什么 Go 要定义这个零值来增加复杂度?
有什么用
将一个值设置为已知默许值的特性,关于程序的平安性和正确性十分重要。能够使你的 Go 程序愈加简单和紧凑。这就是 Go 程序员常说的 "给你的构造一个有用的零值"。
官计划例
以下是 Go 官方给出的几个零值的例子,十分具有代表性。分别是:\
- sync.Mutex。
- byte.Buffer。
- nil func。
Sync.Mutex
sync.Mutex 被设计为无需显式初始化就能够运用,能够完成这个功用的缘由是 sync.Mutex 包 含两个未导出的整数字段。
用大文言讲,就是由于零值的存在,只需声明了 sync.Mutex,这些字段就会被设置为 0(值会被初始化)。
因而能够无需显式初始化就能够开箱即用。