Go 语言学习查缺补漏 ing Day4
Go 语言学习查缺补漏 ing Day4
一、掌握 iota 的使用
请看下面这段代码:
思考一下输出结果会是什么?
先不公布输出结果。先来谈一谈 iota,iota 是用于给需要自增长常量赋值的标识符。我们可以用下划线_
来省略掉不想要的值。而我们中间给变量赋值了,然后如果后续的变量如果不赋值,后续的 d,d1 的值就会和 c 一样。但是如果再次给一个变量标志为 iota,就又会赋值自增长的值,而且值从第一个 iota 使用时就一直在自增长。
所以输出结果是:
我们再来看一看 iota 这个用法:
运行结果是:
iota 是在下一行才进行增长,而不是每个变量都增长。
二、哪些类型的变量可以赋 nil
你知道上面哪些类型的变量可以赋 nil 值吗?
显然,A 不是,字符串的空值是"",而不是 nil。B 和 E 也不是,他们是数值型,值只能是数字。
而其它类型的变量,比如 interface、chan、func、slice、map、指针都可以赋 nil 作为空值。
三、Golang 的 init 函数
我们都知道 main 函数是 Golang 程序的入口函数,但是 Golang 还有一个特殊的函数 init 函数你可能不知道,它是先于 main 函数执行的,可以实现例如初始化包里的变量等操作。
第一点应该知道的是:一个包可以有多个 init 函数,甚至一个 go 文件都可以出现许多 init 函数。
第二点:同一个 go 文件中的 init 函数是由上往下调用的,而同一个包中,init 函数的调用顺序是根据文件名的顺序来调用的,至于不同包中的 init 函数调用顺序,如果这些包之间不相互依赖的话,就是按照 main 包中 import 的顺序调用,如果相互依赖那就是看谁先被依赖谁就最后被初始化。
第三点:init 函数不能被赋值给函数变量,也不能调用,不然就会编译失败。
第四点:如果一个包被引用多次,那么这个包只会执行 init()函数一次。
四、将函数返回值赋值的一个注意事项
先来看一段代码:
再来看看运行结果:
显然,h := nh
是将函数 nh 赋值给变量 h,而n := nh()
这样看起来将函数赋值给 n 的操作是将函数 nh 的返回值给了 n。所以 h 不是 nil,而 n 是 nil。
版权声明: 本文为 InfoQ 作者【Regan Yue】的原创文章。
原文链接:【http://xie.infoq.cn/article/f03dd47deab5f7cb1eefc113c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论