go語言聖經-複合數據類型 1.以不同的方式組合基本類型可以構造出來的複合數據類型 2.四種類型——數組、slice、map和結構體 3.數組是由同構的元素組成——每個數組元素都是完全相同的類型——結構體則是由異構的元素組成的 4.slice和map則是動態的數據結構,它們將根據需要動態增長 go語 ...
go語言聖經-複合數據類型
1.以不同的方式組合基本類型可以構造出來的複合數據類型
2.四種類型——數組、slice、map和結構體
3.數組是由同構的元素組成——每個數組元素都是完全相同的類型——結構體則是由異構的元素組成的
4.slice和map則是動態的數據結構,它們將根據需要動態增長
go語言聖經-數組
1.因為數組的長度是固定的,因此在Go語言中很少直接使用數組
2.數組字面值語法用一組值來初始化數組
3.數組的長度是數組類型的一個組成部分
4.Printf函數的%x副詞參數,它用於指定以十六進位的格式列印數組或slice全部的元素,%t副詞參數是用於列印布爾型數據,%T副詞參數是用於顯示一個值對應的數據類型
5.函數傳參可以顯式地傳入一個數組指針,那樣的話函數通過指針對數組的任何修改都可以直接反饋到調用者
練習 4.1: 編寫一個函數,計算兩個SHA256哈希碼中不同bit的數目。(參考2.6.2節的PopCount函數。)
練習 4.2: 編寫一個程式,預設情況下列印標準輸入的SHA256編碼,並支持通過命令行flag定製,輸出SHA384或SHA512哈希演算法。
1. 查看下文檔 godoc crypto/sha256
func Sum256(data []byte) [Size]byte
2. godoc crypto
package main import( "fmt" "crypto/sha256" "crypto/sha512" "flag" "strings" ) //命令行標誌 var hashMethod=flag.String("s","sha256","請輸入哈希演算法") func main(){ flag.Parse() num := compareSha256("x","X") fmt.Println(num) //接收命令行flag,進行判斷 printHash(strings.ToUpper(*hashMethod),"x") } /* 練習 4.1: 編寫一個函數,計算兩個SHA256哈希碼中不同bit的數目。(參考2.6.2節的PopCount函數。) */ func compareSha256(str1 string,str2 string)int{ a := sha256.Sum256([]byte(str1)) b := sha256.Sum256([]byte(str2)) num := 0 //迴圈位元組數組 for i:=0;i<len(a);i++{ //1個位元組8個bit,移位運算,獲取每個bit for m:=1;m<=8;m++{ //比較每個bit是否相同 if (a[i] >> uint(m))!=(b[i] >>uint(m)){ num++ } } } return num } /* 練習 4.2: 編寫一個程式,預設情況下列印標準輸入的SHA256編碼,並支持通過命令行flag定製,輸出SHA384或SHA512哈希演算法。 */ func printHash(flag string,str string){ if flag=="SHA256"{ fmt.Printf("%x\n",sha256.Sum256([]byte(str))) return } if flag=="SHA512"{ fmt.Printf("%x\n",sha512.Sum512([]byte(str))) return } if flag=="SHA384"{ fmt.Printf("%x\n",sha512.Sum384([]byte(str))) return } }