亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解決寫入CSV時的“短寫”錯誤

如何解決寫入CSV時的“短寫”錯誤

Go
慕田峪7331174 2022-08-09 16:50:37
我一直遇到這個問題,我似乎無法弄清楚發生了什么。我有將一些信息附加到CSV的代碼。信息來自多個線程,CSV 正在記錄時間。在程序執行過程中的某個時刻,代碼將開始吐出“短寫”,而不是寫入CSV。打印要輸出的數據時,“好”寫入和“短”寫入似乎沒有區別,一旦“短寫”錯誤停止,它就會繼續,直到程序重新啟動。每次需要寫入 CSV 時都會調用此代碼。        output := []string{time.Message, strconv.FormatInt(time.Duration, 10)}        fmt.Println(output)        err := writer.Write(output)        if err != nil {            fmt.Println("An error encountered ::", err)            fmt.Println("writer.Write error")            logMessage(err.Error())        }        writer.Flush()看看我的輸出,這是它開始短寫的地方。[message1 21][message2 207][message3 79]An error encountered :: short writewriter.Write errorshort write這是我在CSV中的輸出message1,21message2,207ssage2,207所以看起來短寫來自第二行,但為什么它把我的信息寫了兩次,為什么它是“短寫”消息?有數百條成功的消息,然后錯誤似乎突然發生??纯创a,調用CSV編寫器功能的地方只命中了一次,所以我真的被困在為什么會發生這種情況。
查看完整描述

2 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

應用程序在 上有數據競賽。使用同步?;コ怏w,以確保一次只有一個 goroutine 訪問寫入器。writer


mu.Lock() // <-- Lock to prevent concurrent write and flush.

output := []string{time.Message, strconv.FormatInt(time.Duration, 10)}

fmt.Println(output)

err := writer.Write(output)

if err != nil {

  fmt.Println("An error encountered ::", err)

  fmt.Println("writer.Write error")

  logMessage(err.Error())

}

writer.Flush()

mu.Unlock() // <-- Unlock.

在應用程序上運行比賽檢測器并修復任何報告的問題。


查看完整回答
反對 回復 2022-08-09
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

我猜你正在使用帶有緩沖區的作家(如)。當灌漿機將數據寫入緩沖區而另一個灌漿機嘗試刷新時,會發生此錯誤。bufio


只需在關鍵部分添加一個儲物柜即可。


mu.Lock()

// critical section

mu.Unlock()


查看完整回答
反對 回復 2022-08-09
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號