update tw

This commit is contained in:
chai2010
2015-12-18 10:53:03 +08:00
parent 510c741a6f
commit c66a96ee52
106 changed files with 864 additions and 864 deletions

View File

@@ -3,26 +3,26 @@
包的初始化首先是解決包級變量的依賴順序, 然後安裝包級變量聲明齣現的順序依次初始化:
```Go
var a = b + c // a 第三個初始化, 3
var b = f() // b 第二個初始化, 2, 通過調用 f (依賴c)
var c = 1 // c 第一個初始化, 1
var a = b + c // a 第三個初始化, 3
var b = f() // b 第二個初始化, 2, 通過調用 f (依賴c)
var c = 1 // c 第一個初始化, 1
func f() int { return c + 1 }
```
如果包中含有多個 .go 文件, 它們按照給編譯器的順序進行初始化, Go的構建工具首先將 .go 文件根據文件名排序, 然後依次調用編譯器編譯.
如果包中含有多個 .go 文件, 它們按照給編譯器的順序進行初始化, Go的構建工具首先將 .go 文件根據文件名排序, 然後依次調用編譯器編譯.
對於在包級聲明的變量, 如果有初始化達式則用達式初始化, 還有一些沒有初始化達式的, 例如 某些格數據 初始化不是一個簡單的賦值過程. 在這種情況下, 我們可以用 init 初始化函數來簡化工作. 每個文件都可以包含多個 init 初始化函數
對於在包級聲明的變量, 如果有初始化達式則用達式初始化, 還有一些沒有初始化達式的, 例如 某些格數據 初始化不是一個簡單的賦值過程. 在這種情況下, 我們可以用 init 初始化函數來簡化工作. 每個文件都可以包含多個 init 初始化函數
```Go
func init() { /* ... */ }
```
這樣的init初始化函數除了不能被調用或引用外, 其他行和普通函數類似. 在每個文件中的init初始化函數, 在程序開始執行時按照它們聲明的順序被自動調用.
這樣的init初始化函數除了不能被調用或引用外, 其他行和普通函數類似. 在每個文件中的init初始化函數, 在程序開始執行時按照它們聲明的順序被自動調用.
每個包在解決依賴的前提下, 以導入聲明的順序初始化, 每個包隻會被初始化一次. 因此, 如果一個 p 包導入了 q 包, 那在 p 包初始化的時候可以認 q 包已經初始化過了. 初始化工作是自下而上進行的, main 包最後被初始化. 以這種方式, 確保 在 main 函數執行之前, 所有的包都已經初始化了.
每個包在解決依賴的前提下, 以導入聲明的順序初始化, 每個包隻會被初始化一次. 因此, 如果一個 p 包導入了 q 包, 那在 p 包初始化的時候可以認 q 包已經初始化過了. 初始化工作是自下而上進行的, main 包最後被初始化. 以這種方式, 確保 在 main 函數執行之前, 所有的包都已經初始化了.
的代碼定義了一個 PopCount 函數, 用於返迴一個數字中含二進製1bit的個數. 它使用 init 初始化函數來生成輔助格 pc, pc 格用於處理每個8bit寬度的數字含二進製的1bit的個數, 這樣的話在處理64bit寬度的數字時就沒有必要循環64次, 隻需要8次査就可以了. (這不是最快的統計1bit數目的算法, 但是他可以方便演示init函數的用法, 且演示了如果預生成輔助格, 這是編程中常用的技.)
的代碼定義了一個 PopCount 函數, 用於返迴一個數字中含二進製1bit的個數. 它使用 init 初始化函數來生成輔助格 pc, pc 格用於處理每個8bit寬度的數字含二進製的1bit的個數, 這樣的話在處理64bit寬度的數字時就沒有必要循環64次, 隻需要8次査就可以了. (這不是最快的統計1bit數目的算法, 但是他可以方便演示init函數的用法, 且演示了如果預生成輔助格, 這是編程中常用的技.)
```Go
gopl.io/ch2/popcount
@@ -59,9 +59,9 @@ for i, _ := range pc {
我們在下一節和10.5節還將看到其它使用init函數的地方.
**練習2.3:** 重寫 PopCount 函數, 用一個循環代替單一的達式. 比較兩個版本的性能. (11.4節將展示如何繫統地比較兩個不實現的性能.)
**練習2.3:** 重寫 PopCount 函數, 用一個循環代替單一的達式. 比較兩個版本的性能. (11.4節將展示如何繫統地比較兩個不實現的性能.)
**練習2.4:** 用移位的算法重寫 PopCount 函數, 每次測試最右邊的1bit, 然後統計總數. 比較和査算法的性能差異.
**練習2.4:** 用移位的算法重寫 PopCount 函數, 每次測試最右邊的1bit, 然後統計總數. 比較和査算法的性能差異.
**練習2.5:** 達式 `x&(x-1)` 用於將 x 的最低的一個1bit位清零. 使用這個格式重寫 PopCount 函數, 然後比較性能.
**練習2.5:** 達式 `x&(x-1)` 用於將 x 的最低的一個1bit位清零. 使用這個格式重寫 PopCount 函數, 然後比較性能.