golang文件內(nèi)容覆蓋問題的分析及解決
項目場景:
通過golang讀取數(shù)據(jù)庫站點映射配置,生成nginx conf文件,并檢查和重啟nginx服務(wù),已達到站點自動化部署目的。
問題描述
當(dāng)目標(biāo)文件中內(nèi)容很長,而寫入的內(nèi)容很短時,目標(biāo)文件內(nèi)容無法完全覆蓋。
package main import ( "os" ) func ConfWrite() error { config := confTemplate() fileName := "/Users/test/Documents/test.txt" f, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0666) if err != nil { return err } defer f.Close() if _, err = f.WriteString(config); err != nil { return err } return nil } func confTemplate() string { return ` <<listenPort>> server { listen 80; listen 443 ssl; server_name xxx.com; location / { <<proxyPass>> root /data/test; } }` } func main() { _ = ConfWrite() }
原因分析:
此分析未必正確,日后查到確切原因,再來補充。
os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0666) 此函數(shù)打開文件時,緩沖區(qū)的長度由原文件的內(nèi)容決定。如果使用f.WriteString(str) 寫入的str內(nèi)容比原文件緩沖區(qū)的長度短,則原文件尾部的部分內(nèi)容會保留。并未實現(xiàn)完全覆蓋的效果。如果str內(nèi)容比原文件緩沖區(qū)的長度長,則原文件會被完全覆蓋。
解決方案:
添加os.O_TRUNC,清空文件。
os.OpenFile(fileName, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0666)
總結(jié)
到此這篇關(guān)于golang文件內(nèi)容覆蓋問題的分析及解決的文章就介紹到這了,更多相關(guān)golang文件內(nèi)容覆蓋內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一百行Golang代碼實現(xiàn)簡單并發(fā)聊天室
這篇文章主要為大家詳細(xì)介紹了一百行Golang代碼如何實現(xiàn)簡單并發(fā)聊天室,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08Go語言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解
這篇文章主要為大家介紹了Go語言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08一文帶你掌握Golang中panic與recover的使用方法
這篇文章主要介紹了Golang中panic與recover的作用和使用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,需要的小伙伴可以參考一下2023-04-04我放棄Python轉(zhuǎn)Go語言的9大理由(附優(yōu)秀書籍推薦)
這篇文章主要給大家介紹了關(guān)于我放棄Python轉(zhuǎn)Go語言的9大理由,以及給大家推薦了6本優(yōu)秀的go語言書籍,對同樣想學(xué)習(xí)golang的朋友們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10Golang?中的?unsafe.Pointer?和?uintptr詳解
這篇文章主要介紹了Golang中的unsafe.Pointer和uintptr詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08Golang使用協(xié)程實現(xiàn)批量獲取數(shù)據(jù)
服務(wù)端經(jīng)常需要返回一個列表,里面包含很多用戶數(shù)據(jù),常規(guī)做法當(dāng)然是遍歷然后讀緩存。使用Go語言后,可以并發(fā)獲取,極大提升效率,本文就來聊聊具體的實現(xiàn)方法,希望對大家有所幫助2023-02-02Go語言調(diào)用SiliconFlow實現(xiàn)文本轉(zhuǎn)換為MP3格式
這篇文章主要為大家詳細(xì)介紹了Go語言如何調(diào)用?SiliconFlow?語音生成?API?的腳本,用于將文本轉(zhuǎn)換為?MP3?格式的語音文件,感興趣的小伙伴可以了解下2025-02-02go開發(fā)alertmanger實現(xiàn)釘釘報警
本文主要介紹了go開發(fā)alertmanger實現(xiàn)釘釘報警,通過自己的url實現(xiàn)alertmanager的釘釘報警,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07golang實現(xiàn)http服務(wù)器處理靜態(tài)文件示例
這篇文章主要介紹了golang實現(xiàn)http服務(wù)器處理靜態(tài)文件的方法,涉及Go語言基于http協(xié)議處理文件的相關(guān)技巧,需要的朋友可以參考下2016-07-07