1.解決包級變數的依賴順序,然後按照包級變數宣告出現的順序依次初始化
2.包中含有多個.go原始檔,它們將按照發給編譯器的順序進行初始化
3.init初始化函式,在每個檔案中的init初始化函式,在程式開始執行時按照它們宣告的順序被自動呼叫
4.每個包在解決依賴的前提下,以匯入宣告的順序初始化,每個包只會被初始化一次,在main函式執行之前,所有依賴的包都已經完成初始化工作了
5.乙個數字中含二進位制1bit的個數演算法,統計出乙個int型數值中位元值為1的位元個數
&是二進位制「與」運算,參加運算的兩個數的二進位制按位進行運算,運算的規律是:
0 & 0=0
0 & 1=0
1 & 0=0
1 & 1=1
練習 2.3: 重寫popcount函式,用乙個迴圈代替單一的表示式。比較兩個版本的效能。(11.4節將展示如何系統地比較兩個不同實現的效能。)
練習 2.4: 用移位演算法重寫popcount函式,每次測試最右邊的1bit,然後統計總數。比較和查表演算法的效能差異。
練習 2.5: 表示式x&(x-1)用於將x的最低的乙個非零的bit位清零。使用這個演算法重寫popcount函式,然後比較效能。
package mainimport(
"fmt"
)var pc [256]byte
func init()
}func main()
//練習 2.4: 用移位演算法重寫popcount函式,每次測試最右邊的1bit,然後統計總數。比較和查表演算法的效能差異。
//移位演算法
func popcount1(x uint64) int
num=i
}
return num
}//練習 2.5: 表示式x&(x-1)用於將x的最低的乙個非零的bit位清零。使用這個演算法重寫popcount函式,然後比較效能。
//x & (x-1)演算法
func popcount2(x uint64) int
return num
}//查表法
func popcount(x uint64) int
//練習 2.3: 重寫popcount函式,用乙個迴圈代替單一的表示式。比較兩個版本的效能。(11.4節將展示如何系統地比較兩個不同實現的效能。)
//查表法,使用迴圈
func popcountfor(x uint64) int
return int(num)
}
日常 Go語言聖經 包和檔案 匯入包習題
1.每個包都有乙個全域性唯一的匯入路徑 2.按照慣例,乙個包的名字和包的匯入路徑的最後乙個字段相同 練習 2.2 寫乙個通用的單位轉換程式,用類似cf程式的方式從命令列讀取引數,如果預設的話則是從標準輸入讀取引數,然後做類似celsius和fahrenheit的單位轉換,長度單位可以對應英呎和公尺,...
Go語言包和檔案
go語言工作空間 編譯工具對原始碼目錄有嚴格要求,每個工作空間 workspace 必須由bin pkg src三個目錄組成。src 專案原始碼目錄,裡面每乙個子目錄,就是乙個包,包內是go語言的原始碼檔案。pkg go語言編譯的.a 中間檔案存放目錄,可自動生成。bin go語言編譯可執行檔案存放...
日常 Go語言聖經 Map習題
練習 4.8 修改charcount程式,使用unicode.isletter等相關的函式,統計字母 數字等unicode中不同的字元類別。練習 4.9 編寫乙個程式wordfreq程式,報告輸入文字中每個單詞出現的頻率。在第一次呼叫scan前先呼叫input.split bufio.scanwor...