This commit is contained in:
Akagi201 2016-04-25 19:09:38 +08:00
parent ea29411119
commit 2929cd94ae

View File

@ -1,6 +1,6 @@
### 2.6.2. 包的初始化
包的初始化首先是解决包级变量的依赖顺序,然后照包级变量声明出现的顺序依次初始化:
包的初始化首先是解决包级变量的依赖顺序,然后照包级变量声明出现的顺序依次初始化:
```Go
var a = b + c // a 第三个初始化, 为 3
@ -22,7 +22,7 @@ func init() { /* ... */ }
每个包在解决依赖的前提下以导入声明的顺序初始化每个包只会被初始化一次。因此如果一个p包导入了q包那么在p包初始化的时候可以认为q包必然已经初始化过了。初始化工作是自下而上进行的main包最后被初始化。以这种方式可以确保在main函数执行之前所有依然的包都已经完成初始化工作了。
下面的代码定义了一个PopCount函数用于返回一个数字中含二进制1bit的个数。它使用init初始化函数来生成辅助表格pcpc表格用于处理每个8bit宽度的数字含二进制的1bit的bit个数这样的话在处理64bit宽度的数字时就没有必要循环64次只需要8次查表就可以了。这并不是最快的统计1bit数目的算法但是它可以方便演示init函数的用法并且演示了如预生成辅助表格,这是编程中常用的技术)。
下面的代码定义了一个PopCount函数用于返回一个数字中含二进制1bit的个数。它使用init初始化函数来生成辅助表格pcpc表格用于处理每个8bit宽度的数字含二进制的1bit的bit个数这样的话在处理64bit宽度的数字时就没有必要循环64次只需要8次查表就可以了。这并不是最快的统计1bit数目的算法但是它可以方便演示init函数的用法并且演示了如预生成辅助表格,这是编程中常用的技术)。
<u><i>gopl.io/ch2/popcount</i></u>
```Go