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