亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2018年10月10日 10:27:51   作者:Mihalis Tsoukalos  
今天小編就為大家分享一篇關于在Go中復制文件最流行的3種方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

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

方法1:使用io.Copy()

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

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

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

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

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

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

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

復制文件的第二種方法是使用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

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

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

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

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

這種技術使用os.Read()用于將輸入文件的一小部分讀入名為buf和os.Write()將緩沖區(qū)的內(nèi)容寫入文件。當讀取錯誤或到達文件末尾時,復制過程停止(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.

做一些基準

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

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

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

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

總結

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

相關文章

  • Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問題的解決方案

    Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問題的解決方案

    在 Golang 中,經(jīng)常需要將其他類型(例如 slice、map、struct 等類型)的數(shù)據(jù)轉(zhuǎn)化為 JSON 格式,有時候轉(zhuǎn)化的結果并不是預期中的,例如將一個空的切片轉(zhuǎn)化為 JSON 時,會變成"null",所以本文將給大家介紹一下解決方法,需要的朋友可以參考下
    2023-09-09
  • Go?實戰(zhàn)單隊列到優(yōu)先級隊列實現(xiàn)圖文示例

    Go?實戰(zhàn)單隊列到優(yōu)先級隊列實現(xiàn)圖文示例

    這篇文章主要為大家介紹了Go?實戰(zhàn)單隊列到優(yōu)先級隊列圖文示例實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 詳解如何用Golang處理每分鐘100萬個請求

    詳解如何用Golang處理每分鐘100萬個請求

    在項目開發(fā)中,我們常常會遇到處理來自數(shù)百萬個端點的大量POST請求,本文主要介紹了Golang實現(xiàn)處理每分鐘100萬個請求的方法,希望對大家有所幫助
    2023-04-04
  • 一文詳解Golang的函數(shù)特性

    一文詳解Golang的函數(shù)特性

    函數(shù)是?Golang?中非常重要的組成部分之一,它們提供了代碼的可重用性和組織性。在本文中,我們將深入了解?Golang?函數(shù)的多個方面,希望對大家有所幫助
    2023-04-04
  • Golang TCP網(wǎng)絡編程的具體實現(xiàn)

    Golang TCP網(wǎng)絡編程的具體實現(xiàn)

    go語言是一門功能強大的編程語言,它提供了眾多的網(wǎng)絡編程庫,其中包括tcp/ip,本文主要介紹了Golang TCP網(wǎng)絡編程的具體實現(xiàn),具有一定的參考價值,感興趣的可以來了解一下
    2024-06-06
  • Go語言map元素的刪除和清空

    Go語言map元素的刪除和清空

    本文主要介紹了Go語言map元素的刪除和清空,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 使用golang獲取linux上文件的訪問/創(chuàng)建/修改時間

    使用golang獲取linux上文件的訪問/創(chuàng)建/修改時間

    這篇文章主要介紹了使用golang獲取linux上文件的訪問/創(chuàng)建/修改時間,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • GO語言開發(fā)環(huán)境搭建過程圖文詳解

    GO語言開發(fā)環(huán)境搭建過程圖文詳解

    這篇文章主要介紹了GO語言開發(fā)環(huán)境搭建過程圖文詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • goframe重寫FastAdmin后端實現(xiàn)實例詳解

    goframe重寫FastAdmin后端實現(xiàn)實例詳解

    這篇文章主要為大家介紹了goframe重寫FastAdmin后端實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • golang?xorm?自定義日志記錄器之使用zap實現(xiàn)日志輸出、切割日志(最新)

    golang?xorm?自定義日志記錄器之使用zap實現(xiàn)日志輸出、切割日志(最新)

    這篇文章主要介紹了golang?xorm?自定義日志記錄器,使用zap實現(xiàn)日志輸出、切割日志,包括連接postgresql數(shù)據(jù)庫的操作方法及?zap日志工具?,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10

最新評論