【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 file

func 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

}

以及我读取的两个文件内容:
【go】go如何获取文件md5的值

【go】go如何获取文件md5的值

main方法如此调用看看hash值:

func main() {

md5Str, _ := HashFileMd5("./test.txt")

fmt.Println(md5Str)

md5Str2, _ := HashFileMd5("./test2.txt")

fmt.Println(md5Str2)

}

文件不重复的结果:
【go】go如何获取文件md5的值

文件内容都改成 we are test file! 看看:
【go】go如何获取文件md5的值

我试了一下,代码没问题,我贴一下我运行的代码,你看看是不是你的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

回到顶部