2 回答

TA贡献2003条经验 获得超2个赞
正如已经建议的那样,您真的应该考虑使用encoding/csv
.
也就是说,您的问题的原因在函数上方的 godocBytes()
中进行了解释:
// Bytes returns the most recent token generated by a call to Scan.
// The underlying array may point to data that will be overwritten
// by a subsequent call to Scan. It does no allocation.
func (s *Scanner) Bytes() []byte {
return s.token
}
因此,返回的字节切片可能会被后续调用修改Scan()。为避免这种情况,您需要复制字节切片,例如
for scanner.Scan() {
row := scanner.Bytes()
bs := make([]byte, len(row))
copy(bs, row)
b.Append(bs)
}

TA贡献1854条经验 获得超8个赞
您需要创建 返回的数据的副本Bytes。
https://pkg.go.dev/bufio@go1.19.3#Scanner.Bytes
Bytes 返回调用 Scan 生成的最新标记。底层数组可能指向将被后续调用 Scan 覆盖的数据。它没有分配。
for scanner.Scan() {
row := make([]byte, len(scanner.Bytes()))
copy(row, scanner.Bytes())
b.Append(row)
}
https://go.dev/play/p/Lqot-wOXiwh
- 2 回答
- 0 关注
- 98 浏览
添加回答
举报