Golang計算md5值的方法都是接收byte型slice([]byte)。而且使用習慣上也覺得略奇怪。
看了好幾個例子才看懂。
感覺Golang標准庫在設計這些模塊的時候,都會考慮使用帶New關鍵字工廠生成一個該類型的結構體對象。然后再使用改對象的方法進行操作。
md5包就是這樣,來看例子:
s := "api_key" + ApiKey + "param" + Param + "time" + time + "version" + version + ApiSecret signByte := []byte(s) hash := md5.New() hash.Write(signByte) return hex.EncodeToString(hash.Sum(nil))
第一行我拼接了一個字符串。
第二行我將這個字符串轉成byte型數組並賦值給了sighByte。
第三行我new了一個md5的實現了hash.Hash的結構體。
第四行我調用這個結構體的方法Write將我需要計算md5的[]byte傳入進去。
第五行我調用hex.EncodeToSring方法來把計算結果轉換成16進制字符串。其中hash.Sum(nil)方法可以生成前面Write進去的signByte變量的128bit md5值。這個hash.Sum方法並不是我們在操作其它語言的那種使用習慣,將值傳遞進去然后返回hash,這里其實是追加一個值一並生成hash。由於我們不需要再追加值了,所以傳入nil得到signByte的hash值。
Reference:
http://stackoverflow.com/questions/24234322/golang-md5-sum-function golang-md5-sum-function