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

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

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

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

方法1:使用io.Copy()

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

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

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

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

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

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

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

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

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

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

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

請(qǐng)注意,盡管此技術(shù)將復(fù)制一個(gè)文件,但是當(dāng)您想要復(fù)制大型文件時(shí),它可能并不有效,因?yàn)閕outil.ReadFile()也將是巨大的。

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • go語(yǔ)言的sql包原理與用法分析

    go語(yǔ)言的sql包原理與用法分析

    這篇文章主要介紹了go語(yǔ)言的sql包原理與用法,較為詳細(xì)的分析了Go語(yǔ)言里sql包的結(jié)構(gòu)、相關(guān)函數(shù)與使用方法,需要的朋友可以參考下
    2016-07-07
  • Go語(yǔ)言開發(fā)環(huán)境搭建與初探(Windows平臺(tái)下)

    Go語(yǔ)言開發(fā)環(huán)境搭建與初探(Windows平臺(tái)下)

    Go是Google開發(fā)的一種編譯型,並發(fā)型,并具有垃圾回收功能的編程語(yǔ)言,可能很多人想學(xué)習(xí)go語(yǔ)言,那么首先就要了解go語(yǔ)言的環(huán)境配置方法
    2014-10-10
  • go-zero數(shù)據(jù)的流處理利器fx使用詳解

    go-zero數(shù)據(jù)的流處理利器fx使用詳解

    這篇文章主要為大家介紹了go-zero數(shù)據(jù)的流處理利器fx使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • go grpc安裝使用教程

    go grpc安裝使用教程

    gRPC是由Google主導(dǎo)開發(fā)的RPC框架,使用HTTP/2協(xié)議并用ProtoBuf作為序列化工具。這篇文章主要介紹了go grpc安裝使用教程,需要的朋友可以參考下
    2018-02-02
  • golang grpc配置使用實(shí)戰(zhàn)

    golang grpc配置使用實(shí)戰(zhàn)

    本文主要介紹了golang grpc配置使用實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Go?Fiber快速搭建一個(gè)HTTP服務(wù)器

    Go?Fiber快速搭建一個(gè)HTTP服務(wù)器

    Fiber?是一個(gè)?Express?啟發(fā)?web?框架基于?fasthttp?,最快?Go?的?http?引擎,這篇文章主要介紹了Go?Fiber快速搭建一個(gè)HTTP服務(wù)器,需要的朋友可以參考下
    2023-06-06
  • Go?Gin框架優(yōu)雅重啟和停止實(shí)現(xiàn)方法示例

    Go?Gin框架優(yōu)雅重啟和停止實(shí)現(xiàn)方法示例

    Web應(yīng)用程序中,有時(shí)需要重啟或停止服務(wù)器,無(wú)論是因?yàn)楦麓a還是進(jìn)行例行維護(hù),這時(shí)需要保證應(yīng)用程序的可用性和數(shù)據(jù)的一致性,就需要優(yōu)雅地關(guān)閉和重啟應(yīng)用程序,即不丟失正在處理的請(qǐng)求和不拒絕新的請(qǐng)求,本文將詳解如何在Go語(yǔ)言中使用Gin這個(gè)框架實(shí)現(xiàn)優(yōu)雅的重啟停止
    2024-01-01
  • go chan基本使用詳解

    go chan基本使用詳解

    本文主要介紹了go chan基本使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 揭秘Go語(yǔ)言中的反射機(jī)制

    揭秘Go語(yǔ)言中的反射機(jī)制

    在Go語(yǔ)言中,反射是通過reflect包來(lái)實(shí)現(xiàn)的,通過使用反射,我們可以在運(yùn)行時(shí)獲取對(duì)象的類型信息、訪問對(duì)象的字段和方法、動(dòng)態(tài)調(diào)用方法等,反射在很多場(chǎng)景下都非常有用,比如編寫通用的代碼、實(shí)現(xiàn)對(duì)象的序列化和反序列化、實(shí)現(xiàn)依賴注入等,需要的朋友可以參考下
    2023-10-10
  • 使用Go語(yǔ)言中的Context取消協(xié)程執(zhí)行的操作代碼

    使用Go語(yǔ)言中的Context取消協(xié)程執(zhí)行的操作代碼

    在 Go 語(yǔ)言中,協(xié)程(goroutine)是一種輕量級(jí)的線程,非常適合處理并發(fā)任務(wù),然而,如何優(yōu)雅地取消正在運(yùn)行的協(xié)程是一個(gè)常見的問題,本文將通過一個(gè)具體的例子來(lái)展示如何使用 context 包來(lái)取消協(xié)程的執(zhí)行,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

彩票| 乌海市| 吉林市| 涟源市| 乌鲁木齐市| 塔城市| 天津市| 嵩明县| 砚山县| 年辖:市辖区| 郑州市| 周口市| 永春县| 和龙市| 甘泉县| 灵山县| 会昌县| 阿克| 独山县| 桦甸市| 鄄城县| 密云县| 花垣县| 弥渡县| 喀喇| 义乌市| 工布江达县| 女性| 乌兰浩特市| 通海县| 疏附县| 房山区| 乐清市| 旺苍县| 右玉县| 周宁县| 庆云县| 青神县| 桂东县| 玛曲县| 股票|