佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 在Go中復(fù)制文件最流行的3種方法

在Go中復(fù)制文件最流行的3種方法

熱門標(biāo)簽:Linux服務(wù)器 地方門戶網(wǎng)站 呼叫中心市場需求 AI電銷 網(wǎng)站排名優(yōu)化 百度競價排名 鐵路電話系統(tǒng) 服務(wù)外包

本文將向您展示如何在GO編程語言。盡管Go中有三種以上的復(fù)制文件的方法,但本文將介紹三種最常見的方法:這三種方法各有利弊,我們只需要在應(yīng)用中選擇最合適的即可,不必盲目追求性能。
使用io.Copy()從GO庫調(diào)用函數(shù);一次性讀取輸入文件并將其寫入另一個文件;并使用緩沖區(qū)以小塊的形式復(fù)制文件。

方法1:使用io.Copy()

該實用程序的第一個版本將使用io.Copy()標(biāo)準(zhǔn)GO庫的功能。實現(xiàn)中可以找到實用程序的邏輯。copy()職能如下:

除了測試要復(fù)制的文件是否存在外(os.Stat(src)),并且是一個常規(guī)文件(sourceFileStat.Mode().IsRegular())這樣您就可以打開它閱讀,所有的工作都是由io.Copy(destination, source)聲明。這,這個,那,那個io.Copy()函數(shù)返回復(fù)制的字節(jié)數(shù)和復(fù)制過程中發(fā)生的第一條錯誤消息。在Go中,如果沒有錯誤消息,則錯誤變量的值將為nil.

您可以了解更多關(guān)于io.Copy()在IO封裝文件頁。

執(zhí)行cp1.go將生成下一種輸出:

$ run cp1
Please provide two command line arguments
$ run cp1 fileCPtxt tmpfileCPCOPY
Copied bytes
$ diff fileCPtxt tmpfileCPCOPY

這種技術(shù)盡可能簡單,但不給開發(fā)人員帶來靈活性,這并不總是一件壞事。但是,有時開發(fā)人員需要或希望決定如何讀取文件。

方法2:使用ioutil.WriteFile()和ioutil.ReadFile()

復(fù)制文件的第二種方法是使用ioutil.ReadFile()和ioutil.WriteFile()職能。第一個函數(shù)將整個文件的內(nèi)容讀入字節(jié)片,第二個函數(shù)將字節(jié)片的內(nèi)容寫入文件中。
實用程序的邏輯可以在以下GO代碼中找到:

除了這兩個if塊,它們是工作方式的一部分,您可以看到程序的功能在ioutil.ReadFile()和ioutil.WriteFile()陳述。

執(zhí)行cp2.go將生成下一種輸出:

$ run cp2
Please provide two command line arguments
$ run cp2 fileCPtxt tmpcopyFileCP
$ diff fileCPtxt tmpcopyFileCP

請注意,盡管此技術(shù)將復(fù)制一個文件,但是當(dāng)您想要復(fù)制大型文件時,它可能并不有效,因為ioutil.ReadFile()也將是巨大的。

方法3:使用os.Read()和os.Write()

在GO中復(fù)制文件的第三種方法是使用cp3.go將在本節(jié)中開發(fā)的實用程序。它接受三個參數(shù):輸入文件的文件名、輸出文件的文件名和緩沖區(qū)的大小。

最重要的部分cp3.go駐留在以下for循環(huán),可以在copy() function:

這種技術(shù)使用os.Read()用于將輸入文件的一小部分讀入名為buf和os.Write()將緩沖區(qū)的內(nèi)容寫入文件。當(dāng)讀取錯誤或到達(dá)文件末尾時,復(fù)制過程停止(io.EOF).

執(zhí)行cp3.go將生成下一種輸出:

$ run cp3
usage cp3 source destination BUFFERSIZE
$ run cp3 fileCPtxt tmpbuf10 
Copying fileCPtxt to tmpbuf10
$ run cp3 fileCPtxt tmpbuf20 
Copying fileCPtxt to tmpbuf20

如您所見,緩沖區(qū)的大小極大地影響了cp3.go.

做一些基準(zhǔn)

本文的最后一部分將嘗試比較這三個程序以及cp3.go對于不同的緩沖區(qū)大小,請使用time(1)命令行實用程序。

下面的輸出顯示了cp1.go, cp2.go,和cp3.go復(fù)制500 MB文件時:

輸出結(jié)果表明,這三個實用程序的性能非常相似,這意味著標(biāo)準(zhǔn)GO庫的功能非常聰明和優(yōu)化。

現(xiàn)在,讓我們測試緩沖區(qū)大小如何影響cp3.go。執(zhí)行cp3.go如果緩沖區(qū)大小為10、20和1,000字節(jié),以便在相當(dāng)快的計算機上復(fù)制500MB文件,生成的輸出顯示,緩沖區(qū)越大,cp3.go實用程序,這或多或少是預(yù)期的。此外,使用小于20個字節(jié)的緩沖區(qū)大小復(fù)制大文件是一個非常緩慢的過程,應(yīng)該避免。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:
  • GO語言實現(xiàn)簡單的目錄復(fù)制功能
  • golang實現(xiàn)簡易的分布式系統(tǒng)方法
  • Go語言實現(xiàn)互斥鎖、隨機數(shù)、time、List
  • Golang獲取當(dāng)前時間代碼
  • Golang字符串的拼接方法匯總
  • Go語言中 Channel 詳解
  • go語言中strings包的用法匯總
  • Golang中的變量學(xué)習(xí)小結(jié)
  • Golang中的自定義函數(shù)詳解

標(biāo)簽:銅川 湘潭 蘭州 湖南 黃山 衡水 仙桃 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在Go中復(fù)制文件最流行的3種方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    翼城县| 定安县| 富阳市| 黔西县| 兴文县| 利津县| 油尖旺区| 石渠县| 高唐县| 墨江| 临颍县| 张北县| 新安县| 临夏县| 阜阳市| 习水县| 正定县| 余姚市| 江油市| 韶山市| 冕宁县| 儋州市| 获嘉县| 绥宁县| 彭泽县| 阳朔县| 光泽县| 淮安市| 银川市| 郴州市| 龙岩市| 萨嘎县| 海晏县| 瓮安县| 天门市| 弥渡县| 孙吴县| 盐池县| 介休市| 安国市| 山西省|