go寫文件后出現(xiàn)大量NUL字符問(wèn)題解決
背景
寫文件完成后發(fā)現(xiàn):

size明顯也和正常的不相等。
看看修改前
buf := make([]byte, 64) buffer := bytes.NewBuffer(buf) // ...其它邏輯使得buffer有值 // 打開即將要寫入的文件,不存在則創(chuàng)建 f, err := os.OpenFile(filepath, os.O_CREATE|os.O_TRUNC, 0666) writer := bufio.NewWriter(f) n, err := io.Copy(writer, buffer) err = writer.Flush()
修改后
主要是前兩句,替換為
buffer := bytes.NewBuffer([]byte{})或
buffer := &bytes.Buffer{}下面的代碼一樣。
原因
每次寫的時(shí)候設(shè)置的長(zhǎng)度都是64,在某次不足64時(shí),byte切片空余位置被填充為空字符;至于到底是文件前、文件中、文件末尾等什么地方出現(xiàn)該字符,就看每次填充到buf是怎么填充的了。
如果不是用io.Copy,比如用的是如下方式進(jìn)行寫操作:
_, err = writer.Write(bs[:n])
則Write方法盡量寫成bs[:n],這里的n是本次要寫入的實(shí)際長(zhǎng)度,而不是直接的bs或bs[:],即重點(diǎn)是控制長(zhǎng)度,否則都可能產(chǎn)生此問(wèn)題。
到此這篇關(guān)于go寫文件后出現(xiàn)大量NUL字符問(wèn)題解決的文章就介紹到這了,更多相關(guān)go出現(xiàn)NUL字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
- 解決Django 在ForeignKey中出現(xiàn) non-nullable field錯(cuò)誤的問(wèn)題
- django 解決自定義序列化返回處理數(shù)據(jù)為null的問(wèn)題
- django模型類中,null=True,blank=True用法說(shuō)明
- django數(shù)據(jù)模型中null和blank的區(qū)別說(shuō)明
- 解決Go語(yǔ)言數(shù)據(jù)庫(kù)中null值的問(wèn)題
- 關(guān)于MongoTemplate通過(guò)id查詢?yōu)閚ull的問(wèn)題
- npm?install編譯時(shí)報(bào)"Cannot?read?properties?of?null?(reading?‘pickAlgorithm‘)"錯(cuò)誤的解決辦法
- npm?ERR!Cannot?read?properties?of?null(reading?'pickAlgorithm')報(bào)錯(cuò)問(wèn)題解決
- Go json反序列化“null“的問(wèn)題解決
- 淺析golang如何處理json中的null
- Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問(wèn)題的解決方案
相關(guān)文章
Golang優(yōu)雅關(guān)閉channel的方法示例
Goroutine和channel是Go在“并發(fā)”方面兩個(gè)核心feature,下面這篇文章主要給大家介紹了關(guān)于Golang如何優(yōu)雅關(guān)閉channel的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考解決,下面來(lái)一起看看吧。2017-11-11
Golang實(shí)現(xiàn)常見排序算法的示例代碼
現(xiàn)在的面試真的是越來(lái)越卷了,算法已經(jīng)成為了面試過(guò)程中必不可少的一個(gè)環(huán)節(jié),你如果想進(jìn)稍微好一點(diǎn)的公司,算法是必不可少的一個(gè)環(huán)節(jié)。本文為大家準(zhǔn)備了Golang實(shí)現(xiàn)常見排序算法的示例代碼,需要的可以參考一下2022-05-05
使用Go語(yǔ)言解決Scan空格結(jié)束輸入問(wèn)題
這篇文章主要為大家介紹了使用Go語(yǔ)言來(lái)解決Scan空格結(jié)束輸入問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
golang使用go test輸出單元測(cè)試覆蓋率的方式
單元測(cè)試覆蓋率是衡量代碼質(zhì)量的一個(gè)重要指標(biāo),重要的代碼文件覆蓋率應(yīng)該至少達(dá)到80%以上,Java 可以通過(guò)JaCoCo 統(tǒng)計(jì)覆蓋率,那么go 項(xiàng)目如何進(jìn)行代碼覆蓋率測(cè)試呢,本文將給大家詳細(xì)的介紹一下golang使用go test輸出單元測(cè)試覆蓋率的方式,需要的朋友可以參考下2024-02-02
Go Mongox輕松實(shí)現(xiàn)MongoDB的時(shí)間字段自動(dòng)填充
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言如何使用 mongox 庫(kù),在插入和更新數(shù)據(jù)時(shí)自動(dòng)填充時(shí)間字段,從而提升開發(fā)效率并減少重復(fù)代碼,需要的可以參考下2025-02-02

