使用Go語(yǔ)言實(shí)現(xiàn)向文件寫入內(nèi)容的示例代碼
一、案例目標(biāo)
編寫一個(gè) Go 程序,將一段字符串內(nèi)容寫入到本地 .txt
文件中。若文件不存在則自動(dòng)創(chuàng)建,存在則覆蓋寫入或追加寫入。
二、應(yīng)用場(chǎng)景示例
- 日志系統(tǒng):寫入運(yùn)行記錄、用戶行為
- 自動(dòng)生成報(bào)告:寫結(jié)果到文件中
- 導(dǎo)出數(shù)據(jù):如導(dǎo)出表格、文本分析報(bào)告
- 寫配置文件或緩存
三、涉及知識(shí)點(diǎn)
知識(shí)點(diǎn) | 說明 |
---|---|
os.WriteFile | 快捷寫入整個(gè)內(nèi)容 |
os.OpenFile | 控制寫入模式(創(chuàng)建/追加/覆蓋) |
defer 關(guān)閉文件 | 避免資源泄露 |
字符編碼 | Go 默認(rèn) UTF-8 支持中文無(wú)障礙 |
四、功能需求
- 將一段字符串寫入指定文件;
- 自動(dòng)創(chuàng)建新文件;
- 支持兩種寫入模式:覆蓋寫入 & 追加寫入;
- 寫入完成提示用戶。
五、示例代碼:覆蓋寫入(適合生成報(bào)告)
package main import ( "fmt" "os" ) func main() { content := "你好,Go語(yǔ)言!\n這是一段寫入文件的文本內(nèi)容。\n" filename := "output.txt" err := os.WriteFile(filename, []byte(content), 0644) if err != nil { fmt.Println("寫入文件失?。?, err) return } fmt.Println("內(nèi)容已成功寫入文件:", filename) }
執(zhí)行后,會(huì)在當(dāng)前目錄生成 output.txt
文件,內(nèi)容如下:
你好,Go語(yǔ)言! 這是一段寫入文件的文本內(nèi)容。
六、示例代碼:追加寫入(適合日志、歷史記錄)
package main import ( "fmt" "os" ) func main() { filename := "log.txt" content := "【INFO】程序運(yùn)行于:" + timeNow() + "\n" // 打開文件并設(shè)置為追加寫入模式 file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { fmt.Println("打開文件失敗:", err) return } defer file.Close() _, err = file.WriteString(content) if err != nil { fmt.Println("寫入失?。?, err) return } fmt.Println("追加寫入成功:", content) } // 獲取當(dāng)前時(shí)間 func timeNow() string { return fmt.Sprintf("%s", os.Getenv("TZ")) // 或 time.Now().Format("2006-01-02 15:04:05") }
日志會(huì)被追加到 log.txt
文件末尾。
七、權(quán)限解釋
權(quán)限模式 | 含義 |
---|---|
0644 | 所有者可讀寫,其他用戶只讀 |
0666 | 所有人可讀寫(不推薦) |
os.O_CREATE | 文件不存在時(shí)創(chuàng)建 |
os.O_APPEND | 寫入追加到末尾 |
os.O_WRONLY | 只寫模式 |
八、拓展建議
- 寫入用戶輸入的內(nèi)容(結(jié)合
fmt.Scanln
); - 支持文件名通過命令行參數(shù)指定;
- 每次寫入自動(dòng)記錄時(shí)間戳;
- 寫 JSON/CSV 文件(見后續(xù)案例);
- 實(shí)現(xiàn)簡(jiǎn)單的記事本工具或日志記錄器;
小結(jié)
通過本案例你學(xué)會(huì)了:
- 如何創(chuàng)建并寫入本地文件
- 快速寫入 vs 控制寫入模式
- 寫入中文、自動(dòng)編碼無(wú)障礙
- 錯(cuò)誤處理與資源釋放的好習(xí)慣
以上就是使用Go語(yǔ)言實(shí)現(xiàn)向文件寫入內(nèi)容的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Go向文件寫入內(nèi)容的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang中sync.Map并發(fā)創(chuàng)建、讀取問題實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于golang中sync.Map并發(fā)創(chuàng)建、讀取問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07輕松構(gòu)建Go應(yīng)用的Dockerfile
本文介紹了如何制作一個(gè)用于構(gòu)建和運(yùn)行Go應(yīng)用程序的Docker鏡像的Dockerfile的相關(guān)資料,需要的朋友可以參考下2023-10-10Go?interface{}?轉(zhuǎn)切片類型的實(shí)現(xiàn)方法
本文主要介紹了Go?interface{}?轉(zhuǎn)切片類型的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02一篇文章讀懂Golang?init函數(shù)執(zhí)行順序
init()函數(shù)會(huì)在包被初始化后自動(dòng)執(zhí)行,并且在main()函數(shù)之前執(zhí)行,但是需要注意的是init()以及main()函數(shù)都是無(wú)法被顯式調(diào)用的,下面這篇文章主要給大家介紹了關(guān)于如何通過一篇文章讀懂Golang?init函數(shù)執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下2022-11-11