Go语言技术文章
-
Go 用 json.Decoder 解码到 interface{} 时,JSON 数字默认会变成 float64。本文演示 UseNumber 如何保留数字字面量,再按需调用 Int64 或 String,避免大整数被浮点转换。427 收藏 -
Go 返回短子切片时,普通切片表达式仍会共享大数组。本文用 make+copy、slices.Clone 和 bytes.Clone 说明如何复制窗口数据,并解释三索引表达式为何不能解决内存持有问题。414 收藏 -
Go encoding/csv 中把 Reader.Comment 设为 0 就能关闭注释行过滤,让井号开头的文本回到普通 CSV 记录;文章同时说明首次读取前的配置时机、前导空白、Comma 冲突和格式错误边界。499 收藏 -
Go 切片别名共享底层数组时,append 可能覆盖另一份切片可见的数据。本文用 full slice expression 的第三个下标限制容量,并说明它对直接写入和其他别名的保护边界。257 收藏 -
Go encoding/csv 的 Comment 只识别没有前导空白的物理行首。引号字段中的 # 属于字段值,不会被当成注释;本文用代码和边界表说明三种情况的区别。105 收藏 -
Go 截取子切片后修改元素会影响原切片,根因是两个切片共享底层数组。本文用 len、cap、三下标切片、append、slices.Clone 和 copy 说明如何判断并隔离这类修改。213 收藏 -
Go encoding/csv 读取带注释行的 CSV 时,设置 Reader.Comment 即可跳过行首注释;本文同时说明前导空白、TrimLeadingSpace、FieldsPerRecord 和解析错误的处理边界。331 收藏 -
sync.Map 虽然支持并发安全,但只针对少数访问模式优化。本文从单键写一次、不同 key 并发、同键频繁覆盖、复合更新和 Range 一致性几个角度,说明什么时候应该换回强类型 map 加 RWMutex。109 收藏 -
ReuseRecord 只影响 Reader.Read 返回的记录切片是否可复用,对 ReadAll 没有把全部记录变成单行复用的效果。本文比较两种读取方式的内存边界,并给出流式处理、保留记录和错误检查的选择方法。326 收藏 -
Go 普通 map 只有在初始化后不再写入时才适合被多个 goroutine 并发读取。本文拆开读写边界,说明 RWMutex、sync.Map、所有权模型和 race 检查器的使用场景。399 收藏 -
Go 的 encoding/csv 开启 ReuseRecord 后,保存记录应复制返回的 []string 外层切片,而不是逐个重建字符串。本文说明复用边界、异步投递时机、ReadAll 差异和可直接采用的代码写法。394 收藏 -
Go 普通 map 遇到并发读写时可能触发 fatal error。本文从访问边界、锁方案、sync.Map 和 channel 所有权对比入手,给出排查与修复清单。460 收藏 -
Go encoding/csv 开启 ReuseRecord 后,Read 返回的记录切片可能与下一次读取共享底层数组。本文用 goroutine 场景说明何时复制 []string,以及如何避免异步任务读到被覆盖的数据。155 收藏 -
Go map 只有在所有 goroutine 都只读、没有任何写入时才可以安全并发读取。本文区分只读快照、sync.RWMutex、sync.Map 与 atomic.Value 复制替换,说明读写混合场景如何选择同步边界,并用 -race 检查遗漏。163 收藏 -
Golang · Go教程 | 2星期前 | 标准库 · 文件读取 · Go教程 · 错误排查 · Go ReadAll read encoding/csv FieldsPerRecord ErrFieldCount
Go encoding/csv 的列数错误不是等到 ReadAll 结束才检查,而是在读取具体记录时由 Read 逻辑发现。本文对比 Read 与 ReadAll 的返回值、FieldsPerRecord 三种语义,并给出定位故障行的处理方式。315 收藏