golang文件內(nèi)容覆蓋問題的分析及解決
項(xiàng)目場景:
通過golang讀取數(shù)據(jù)庫站點(diǎn)映射配置,生成nginx conf文件,并檢查和重啟nginx服務(wù),已達(dá)到站點(diǎn)自動化部署目的。
問題描述
當(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)容會保留。并未實(shí)現(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代碼實(shí)現(xiàn)簡單并發(fā)聊天室
這篇文章主要為大家詳細(xì)介紹了一百行Golang代碼如何實(shí)現(xiàn)簡單并發(fā)聊天室,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
Go語言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解
這篇文章主要為大家介紹了Go語言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
一文帶你掌握Golang中panic與recover的使用方法
這篇文章主要介紹了Golang中panic與recover的作用和使用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考一下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í)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
Golang?中的?unsafe.Pointer?和?uintptr詳解
這篇文章主要介紹了Golang中的unsafe.Pointer和uintptr詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08
Golang使用協(xié)程實(shí)現(xiàn)批量獲取數(shù)據(jù)
服務(wù)端經(jīng)常需要返回一個(gè)列表,里面包含很多用戶數(shù)據(jù),常規(guī)做法當(dāng)然是遍歷然后讀緩存。使用Go語言后,可以并發(fā)獲取,極大提升效率,本文就來聊聊具體的實(shí)現(xiàn)方法,希望對大家有所幫助2023-02-02
Go語言調(diào)用SiliconFlow實(shí)現(xiàn)文本轉(zhuǎn)換為MP3格式
這篇文章主要為大家詳細(xì)介紹了Go語言如何調(diào)用?SiliconFlow?語音生成?API?的腳本,用于將文本轉(zhuǎn)換為?MP3?格式的語音文件,感興趣的小伙伴可以了解下2025-02-02
go開發(fā)alertmanger實(shí)現(xiàn)釘釘報(bào)警
本文主要介紹了go開發(fā)alertmanger實(shí)現(xiàn)釘釘報(bào)警,通過自己的url實(shí)現(xiàn)alertmanager的釘釘報(bào)警,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
golang實(shí)現(xiàn)http服務(wù)器處理靜態(tài)文件示例
這篇文章主要介紹了golang實(shí)現(xiàn)http服務(wù)器處理靜態(tài)文件的方法,涉及Go語言基于http協(xié)議處理文件的相關(guān)技巧,需要的朋友可以參考下2016-07-07

