go如何获取文件md5的值

搜了一圈答案都一样,
``
fileMd5 := md5.New()
fmt.Println(fileMd5)
io.Copy(fileMd5,file)
MD5Str := hex.EncodeToString(fileMd5.Sum(nil))
``
但是不同的文件出来的md5值是一样的,是我哪里弄错了吗?

阅读 10k
3 个回答
新手上路,请多包涵

首先使用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
}

以及我读取的两个文件内容:
image.png

image.png

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

func main() {
    md5Str, _ := HashFileMd5("./test.txt")
    fmt.Println(md5Str)
    md5Str2, _ := HashFileMd5("./test2.txt")
    fmt.Println(md5Str2)
}

文件不重复的结果:
image.png

文件内容都改成 we are test file! 看看:
image.png

我试了一下,代码没问题,我贴一下我运行的代码,你看看是不是你的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)))
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题