This commit is contained in:
Xargin 2016-07-15 16:54:15 +08:00
parent a7c452d4a1
commit fd1283d830

View File

@ -20,7 +20,7 @@ func init() { /* ... */ }
这样的init初始化函数除了不能被调用或引用外其他行为和普通函数类似。在每个文件中的init初始化函数在程序开始执行时按照它们声明的顺序被自动调用。
每个包在解决依赖的前提下以导入声明的顺序初始化每个包只会被初始化一次。因此如果一个p包导入了q包那么在p包初始化的时候可以认为q包必然已经初始化过了。初始化工作是自下而上进行的main包最后被初始化。以这种方式可以确保在main函数执行之前所有依的包都已经完成初始化工作了。
每个包在解决依赖的前提下以导入声明的顺序初始化每个包只会被初始化一次。因此如果一个p包导入了q包那么在p包初始化的时候可以认为q包必然已经初始化过了。初始化工作是自下而上进行的main包最后被初始化。以这种方式可以确保在main函数执行之前所有依的包都已经完成初始化工作了。
下面的代码定义了一个PopCount函数用于返回一个数字中含二进制1bit的个数。它使用init初始化函数来生成辅助表格pcpc表格用于处理每个8bit宽度的数字含二进制的1bit的bit个数这样的话在处理64bit宽度的数字时就没有必要循环64次只需要8次查表就可以了。这并不是最快的统计1bit数目的算法但是它可以方便演示init函数的用法并且演示了如何预生成辅助表格这是编程中常用的技术