最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決go獲取文件md5值不正確的問(wèn)題

 更新時(shí)間:2024年01月16日 11:46:49   作者:ProblemTerminator  
本文主要介紹了解決go獲取文件md5值不正確的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一次偶然的操作,發(fā)現(xiàn)了一些端倪,獲取md5時(shí)如下是常規(guī)操作:

    md5hash := md5.New()
    
    file, _ := os.Open(filename)
    defer file.Close()
    
    _, err := io.Copy(md5hash, file)  // file 為*os.File類型,即讀取文件后的文件對(duì)象
    if err != nil {
        return err
    }

    md5Str := fmt.Sprintf("%x", md5hash.Sum(nil))

正常情況下,md5Str就是我們想要的。但是再看如下這種情況:

    // 創(chuàng)建目標(biāo)文件,其它兩個(gè)文件將合并到此文件
        dstFile, err := os.Create("path")
        if err != nil {
            return
        }
        defer dstFile.Close()

        srcFile1, openErr := os.Open(filePath)
        if openErr != nil {
            return
        }
        defer srcFile1.Close()
        
        srcFile2, openErr := os.Open(filePath)
        if openErr != nil {
            return
        }
        defer srcFile2.Close()

        // 暫時(shí)去掉錯(cuò)誤處理
        io.Copy(dstFile, srcFile1)
        io.Copy(dstFile, srcFile2)
        
        // 此時(shí)按理說(shuō)dstFile應(yīng)該就是我們想要的結(jié)果了,基于dstFile對(duì)象獲取md5
        // 此位置標(biāo)記為x
        
        md5hash := md5.New()
        totalSize, err := io.Copy(md5hash, dstFile)  
        if err != nil {
            return err
        }

        md5Str := fmt.Sprintf("%x", md5hash.Sum(nil))  // 拿到的md5Str

接下來(lái)是md5對(duì)比流程,將源文件md5和dstFile的md5對(duì)比,結(jié)果發(fā)現(xiàn)不相等。。。

等如上流程執(zhí)行完,發(fā)現(xiàn)兩個(gè)md5不相等,但文件實(shí)際上完全一樣,合并一切正常,那問(wèn)題出在了哪里?

就是出在最后計(jì)算md5值上,在執(zhí)行兩次io.Copy后,我們需要的全部?jī)?nèi)容已經(jīng)全部到了dstFile文件里,但此時(shí)要注意的是,經(jīng)過(guò)兩次io.Copy,dstFile對(duì)象已指向文件末尾,此時(shí)去拿md5拿到的結(jié)果相當(dāng)于是基于空內(nèi)容計(jì)算的(需要從開(kāi)始位置計(jì)算md5),必然不正確,此時(shí)應(yīng)當(dāng)在x位置重置偏移量為開(kāi)始位置,即:

file.Seek(0, 0)

即可成功! 快去試試吧!

到此這篇關(guān)于解決go獲取文件md5值不正確的問(wèn)題的文章就介紹到這了,更多相關(guān)go獲取文件md5值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Go中Set的實(shí)現(xiàn)方式

    詳解Go中Set的實(shí)現(xiàn)方式

    這篇文章主要介紹了詳解Go中Set的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 聊聊Golang性能分析工具pprof的使用

    聊聊Golang性能分析工具pprof的使用

    對(duì)于線上穩(wěn)定運(yùn)行的服務(wù)來(lái)說(shuō),?可能會(huì)遇到?cpu、mem?利用率升高的問(wèn)題,那我們就需要使用?pprof?工具來(lái)進(jìn)行性能分析,所以本文就來(lái)和大家講講pprof的具體使用吧
    2023-05-05
  • 簡(jiǎn)單講解Go程序中使用MySQL的方法

    簡(jiǎn)單講解Go程序中使用MySQL的方法

    這篇文章主要介紹了Go程序中使用MySQL的方法,需要使用第三方包來(lái)進(jìn)行連接,需要的朋友可以參考下
    2015-10-10
  • Golang Slice和map的坑

    Golang Slice和map的坑

    Golang中的Slice和Map在內(nèi)存空間上,有一些不同,本文主要介紹了Golang Slice和map的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • GoFrame框架Scan類型轉(zhuǎn)換實(shí)例

    GoFrame框架Scan類型轉(zhuǎn)換實(shí)例

    這篇文章主要為大家介紹了GoFrame框架Scan類型轉(zhuǎn)換的實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語(yǔ)言定時(shí)任務(wù)的實(shí)現(xiàn)示例

    Go語(yǔ)言定時(shí)任務(wù)的實(shí)現(xiàn)示例

    本文主要介紹了Go語(yǔ)言定時(shí)任務(wù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Golang實(shí)踐指南之獲取目錄文件列表

    Golang實(shí)踐指南之獲取目錄文件列表

    在搭建項(xiàng)目中一般都會(huì)有確定項(xiàng)目根目錄的絕對(duì)路徑的需求,下面這篇文章主要給大家介紹了關(guān)于Golang實(shí)踐指南之獲取目錄文件列表的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Go 語(yǔ)言指針賦值的具體使用

    Go 語(yǔ)言指針賦值的具體使用

    Go語(yǔ)言中指針用于存儲(chǔ)變量地址,可提升性能但需謹(jǐn)慎使用,需注意nil檢查、避免循環(huán)問(wèn)題及返回局部變量地址的陷阱,下面就來(lái)介紹一下指針賦值,感興趣的可以了解一下
    2025-08-08
  • Go庫(kù)text與template包使用示例詳解

    Go庫(kù)text與template包使用示例詳解

    這篇文章主要為大家介紹了Go庫(kù)text與template包使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang 端口復(fù)用測(cè)試的實(shí)現(xiàn)

    Golang 端口復(fù)用測(cè)試的實(shí)現(xiàn)

    這篇文章主要介紹了Golang 端口復(fù)用測(cè)試的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

察隅县| 博兴县| 宜良县| 尚义县| 江西省| 卢湾区| 河北区| 井陉县| 集安市| 昌宁县| 海盐县| 西藏| 凯里市| 颍上县| 正安县| 来安县| 白水县| 从化市| 景泰县| 金湖县| 开封县| 上犹县| 海宁市| 镇坪县| 西乌珠穆沁旗| 遵化市| 宁远县| 宁阳县| 和顺县| 宁强县| 福泉市| 南郑县| 新建县| 普格县| 利津县| 玉屏| 上高县| 鸡东县| 奎屯市| 渝中区| 论坛|