golang文件內(nèi)容覆蓋問題的分析及解決
項(xiàng)目場(chǎng)景:
通過golang讀取數(shù)據(jù)庫站點(diǎn)映射配置,生成nginx conf文件,并檢查和重啟nginx服務(wù),已達(dá)到站點(diǎn)自動(dòng)化部署目的。
問題描述
當(dāng)目標(biāo)文件中內(nèi)容很長,而寫入的內(nèi)容很短時(shí),目標(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()
}
原因分析:
此分析未必正確,日后查到確切原因,再來補(bǔ)充。
os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0666) 此函數(shù)打開文件時(shí),緩沖區(qū)的長度由原文件的內(nèi)容決定。如果使用f.WriteString(str) 寫入的str內(nèi)容比原文件緩沖區(qū)的長度短,則原文件尾部的部分內(nèi)容會(huì)保留。并未實(shí)現(xiàn)完全覆蓋的效果。如果str內(nèi)容比原文件緩沖區(qū)的長度長,則原文件會(huì)被完全覆蓋。
解決方案:
添加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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言使用sync.Mutex實(shí)現(xiàn)資源加鎖
數(shù)據(jù)共享是一把雙刃劍,Go語言為我們提供了?sync.Mutex,一種最基礎(chǔ)也是最常用的加鎖方式,用于保證在任意時(shí)刻只有一個(gè) goroutine 能訪問共享資源,下面我們就來看看具體實(shí)現(xiàn)吧2025-08-08
golang 在windows中設(shè)置環(huán)境變量的操作
這篇文章主要介紹了golang 在windows中設(shè)置環(huán)境變量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
golang利用redis和gin實(shí)現(xiàn)保存登錄狀態(tài)校驗(yàn)登錄功能
這篇文章主要介紹了golang利用redis和gin實(shí)現(xiàn)保存登錄狀態(tài)校驗(yàn)登錄功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
golang中g(shù)ob的實(shí)現(xiàn)示例
本文介紹了Go語言的Gob格式,它是Go以二進(jìn)制形式序列化和反序列化程序數(shù)據(jù)的格式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-11-11
Golang中函數(shù)(Function)和方法(Method)的區(qū)別詳解
在Golang中,大家必然會(huì)頻繁使用到函數(shù)(Function)和方法(Method),但是有的同學(xué)可能并沒有注意過函數(shù)和方法的異同點(diǎn),函數(shù)和方法都是用來執(zhí)行特定任務(wù)的代碼塊,雖然很相似,但也有很大的區(qū)別,所以本文將詳細(xì)講解函數(shù)和方法的定義以及它們的異同點(diǎn)2023-07-07

