使用Go實(shí)現(xiàn)文件復(fù)制的完整流程
案例說(shuō)明
我們將通過(guò)標(biāo)準(zhǔn)庫(kù) os
和 io
提供的函數(shù):
- 讀取用戶輸入的源文件路徑和目標(biāo)文件路徑;
- 打開源文件;
- 創(chuàng)建目標(biāo)文件;
- 使用
io.Copy
將源文件內(nèi)容復(fù)制到目標(biāo)文件中; - 正確處理錯(cuò)誤并關(guān)閉文件。
涉及知識(shí)點(diǎn)
os.Open()
:打開已有文件(只讀)os.Create()
:創(chuàng)建或清空目標(biāo)文件defer
:延遲關(guān)閉文件資源,防止泄漏io.Copy()
:高效完成內(nèi)容復(fù)制- 錯(cuò)誤處理:判斷
err != nil
保證程序健壯
示例代碼
package main import ( "fmt" "io" "os" ) func main() { var source string var target string fmt.Print("請(qǐng)輸入源文件名:") fmt.Scanln(&source) fmt.Print("請(qǐng)輸入目標(biāo)文件名:") fmt.Scanln(&target) err := copyFile(source, target) if err != nil { fmt.Println("復(fù)制失?。?, err) } else { fmt.Println("復(fù)制成功!") } } // copyFile 將 src 文件復(fù)制到 dst 文件 func copyFile(src string, dst string) error { // 打開源文件 srcFile, err := os.Open(src) if err != nil { return err } defer srcFile.Close() // 創(chuàng)建目標(biāo)文件(如果已存在會(huì)被清空) dstFile, err := os.Create(dst) if err != nil { return err } defer dstFile.Close() // 執(zhí)行復(fù)制操作 _, err = io.Copy(dstFile, srcFile) return err }
代碼解析
行號(hào) | 說(shuō)明 |
---|---|
1-3 | 引入 fmt、io、os 標(biāo)準(zhǔn)庫(kù),用于輸入輸出和文件操作 |
5-10 | 提示用戶輸入兩個(gè)文件路徑(源文件和目標(biāo)文件) |
12 | 調(diào)用 copyFile 函數(shù)執(zhí)行復(fù)制,處理返回的錯(cuò)誤 |
16-30 | copyFile 函數(shù)封裝了完整的打開、創(chuàng)建和復(fù)制邏輯 |
22-23 | 使用 defer 確保無(wú)論復(fù)制是否成功,文件都能正確關(guān)閉 |
28 | io.Copy 是高效的文件復(fù)制函數(shù),自動(dòng)處理緩沖和流讀取 |
示例運(yùn)行
請(qǐng)輸入源文件名:hello.txt 請(qǐng)輸入目標(biāo)文件名:hello_copy.txt 復(fù)制成功!
如果源文件不存在:
請(qǐng)輸入源文件名:notfound.txt 請(qǐng)輸入目標(biāo)文件名:copy.txt 復(fù)制失敗:open notfound.txt: no such file or directory
練習(xí)擴(kuò)展
- 在復(fù)制前檢查目標(biāo)文件是否已存在,防止誤覆蓋(
os.Stat
判斷) - 改為使用命令行參數(shù)傳入文件名,而非交互輸入(
os.Args
) - 為大文件增加復(fù)制進(jìn)度百分比(結(jié)合
bufio
和Seek
) - 支持批量復(fù)制多個(gè)文件(
for
遍歷多個(gè)路徑) - 將復(fù)制日志寫入日志文件(結(jié)合
log
包)
小結(jié)
這個(gè)案例展示了使用 Go 實(shí)現(xiàn)文件復(fù)制的完整流程,是掌握文件讀寫操作的關(guān)鍵案例之一。 通過(guò)合理的錯(cuò)誤處理和標(biāo)準(zhǔn)庫(kù)的組合,你可以快速實(shí)現(xiàn)功能強(qiáng)大又可靠的文件工具程序。
到此這篇關(guān)于使用Go實(shí)現(xiàn)文件復(fù)制的完整流程的文章就介紹到這了,更多相關(guān)Go文件復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang連接redis庫(kù)及基本操作示例過(guò)程
這篇文章主要介紹了golang連接redis庫(kù)及基本操作示例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Go語(yǔ)言每天必學(xué)之switch語(yǔ)句
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言每天必學(xué)之switch語(yǔ)句的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12gin項(xiàng)目部署到服務(wù)器并后臺(tái)啟動(dòng)的步驟
本文主要介紹了gin項(xiàng)目部署到服務(wù)器并后臺(tái)啟動(dòng)的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Golang并發(fā)控制的三種實(shí)現(xiàn)方法
在Golang中,有多種方式可以進(jìn)行并發(fā)控制,本文詳細(xì)的介紹了三種實(shí)現(xiàn)方法,Channel優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,清晰易懂,WaitGroup優(yōu)點(diǎn)是子協(xié)程個(gè)數(shù)動(dòng)態(tài)可調(diào)整,Context 優(yōu)點(diǎn)是對(duì)子協(xié)程派生出來(lái)的孫子協(xié)程的控制,缺點(diǎn)是相對(duì)而言的,要結(jié)合實(shí)例應(yīng)用場(chǎng)景進(jìn)行選擇2023-08-08Golang使用Zookeeper實(shí)現(xiàn)分布式鎖
分布式鎖是一種在分布式系統(tǒng)中用于控制并發(fā)訪問(wèn)的機(jī)制,ZooKeeper?和?Redis?都是常用的實(shí)現(xiàn)分布式鎖的工具,本文就來(lái)使用Zookeeper實(shí)現(xiàn)分布式鎖,希望對(duì)大家有所幫助2024-02-02