婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

在Go中復制文件最流行的3種方法

熱門標簽:高德地圖標注口訣 廣州呼叫中心外呼系統 江西轉化率高的羿智云外呼系統 中國地圖標注省會高清 南通如皋申請開通400電話 學海導航地圖標注 地圖標注的汽車標 浙江高速公路地圖標注 西部云谷一期地圖標注

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

方法1:使用io.Copy()

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

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

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

執行cp1.go將生成下一種輸出:

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

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

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

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

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

執行cp2.go將生成下一種輸出:

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

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

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

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

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

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

執行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

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

做一些基準

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

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

輸出結果表明,這三個實用程序的性能非常相似,這意味著標準GO庫的功能非常聰明和優化。

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

總結

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

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

標簽:貴州 曲靖 常州 許昌 吐魯番 德宏 保定 東營

巨人網絡通訊聲明:本文標題《在Go中復制文件最流行的3種方法》,本文關鍵詞  在,中,復制,文件,最流,行的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在Go中復制文件最流行的3種方法》相關的同類信息!
  • 本頁收集關于在Go中復制文件最流行的3種方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 紫金县| 祥云县| 河南省| 岐山县| 崇仁县| 双鸭山市| 县级市| 盘山县| 文安县| 土默特左旗| 榕江县| 邵阳市| 定西市| 连南| 射阳县| 广南县| 琼中| 乾安县| 秭归县| 岗巴县| 紫阳县| 洪泽县| 鸡东县| 七台河市| 辽源市| 孝昌县| 成都市| 松阳县| 开封市| 昌江| 淮南市| 抚顺市| 富源县| 泸溪县| 呼和浩特市| 顺平县| 岢岚县| 通榆县| 大同市| 阿拉善盟| 巴彦淖尔市|