【go】go如何获取文件md5的值
搜了一圈答案都一样,
``
fileMd5 := md5.New()
fmt.Println(fileMd5)
io.Copy(fileMd5,file)
MD5Str := hex.EncodeToString(fileMd5.Sum(nil))
``
但是不同的文件出来的md5值是一样的,是我哪里弄错了吗?
首先使用golang给文件hash编码的逻辑是很简单的了,排除代码中变量传值错误的问题,如@iuoui所说的file变量错误,那另外有个可能就是你读取的文件是重复文件,如下:
贴一下编码的逻辑代码:
//HashFileMd5 return md5 value of filefunc HashFileMd5(filePath string) (md5Str string, err error) {
file, err := os.Open(filePath)
if err != nil {
return
}
defer file.Close()
hash := md5.New()
if _, err = io.Copy(hash, file); err != nil {
return
}
hashInBytes := hash.Sum(nil)[:16]
md5Str = hex.EncodeToString(hashInBytes)
return
}
以及我读取的两个文件内容:
main方法如此调用看看hash值:
func main() {md5Str, _ := HashFileMd5("./test.txt")
fmt.Println(md5Str)
md5Str2, _ := HashFileMd5("./test2.txt")
fmt.Println(md5Str2)
}
文件不重复的结果:
文件内容都改成 we are test file! 看看:
我试了一下,代码没问题,我贴一下我运行的代码,你看看是不是你的file变量的问题
func main() {h := md5.New()
f, err := os.Open("你的文件")
if err != nil {
fmt.Println(err)
return
}
io.Copy(h, f)
fmt.Println(hex.EncodeToString(h.Sum(nil)))
}
已测试,好用
回答
以上是 【go】go如何获取文件md5的值 的全部内容, 来源链接: utcz.com/a/113963.html