Go语言技术文章
-
csv.Reader.InputOffset 返回输入流当前读取位置,也就是最近一条记录的末尾与下一条记录的开头,不是字段坐标。本文说明它与 FieldPos、ParseError 的区别,以及如何用记录边界实现可靠的 CSV 进度检查点。225 收藏 -
json.Decoder.More 只回答当前数组或对象里是否还有元素,不能单独判断顶层 JSON 流是否还有数据。本文区分 More、Token、Decode 与 io.EOF 的边界,并给出遍历容器、读取连续顶层值和拒绝尾随数据的写法。225 收藏 -
context.AfterFunc 适合把取消信号转换成资源清理回调,但 Stop 返回 false 时回调可能已经启动,不能把它当成完成通知。本文从旧式 done 监听迁移到 AfterFunc,拆解取消、停止、同步和测试边界。224 收藏 -
Golang · Go问答 | 1个月前 | 标准库 · go · csv · 数据导入 · Go encoding/csv FieldsPerRecord LazyQuotes ParseError
Go 导入 CSV 时,某一行多一个逗号就可能让整个读取流程报 ErrFieldCount。本文解释 FieldsPerRecord 的默认行为,给出允许可变列、保留原始行号和处理 LazyQuotes 的实战写法,避免把坏数据静默吞掉。224 收藏 -
通过文件读取和服务层包装错误的例子,拆解 Go errors.As 的目标类型匹配、%w 包装链、指针与接口边界,并给出可运行的检查方式。224 收藏 -
解释 Go 接口值为什么看起来有指针却不等于 nil,并用动态类型、返回错误和类型断言示例定位这类问题。224 收藏 -
Go 的 net/http.MaxBytesReader 不只是一个 io.LimitReader:它返回可关闭的请求体,超限读取会得到 MaxBytesError,并可提示服务器关闭连接。本文用上传接口拆开限制位置、错误判断和连接处理边界。224 收藏 -
解释 Go 中 typed nil 为什么会让 error != nil,演示如何拆分接口的动态类型和值,并给出无错误分支直接返回 nil 的修复写法。224 收藏 -
用 Go sync.Cond 实现有界生产者消费者队列时,关键不是记住 Signal 或 Broadcast,而是让条件判断、互斥锁和唤醒动作保持同一条状态链。本文给出可迁移的实现方式与边界检查。224 收藏 -
上传图片时先用 Go image.DecodeConfig 读取宽高和格式,再决定是否进入完整解码,减少大文件校验阶段的内存压力。223 收藏 -
slices.SortFunc 排序结果看似不稳定,通常不是算法随机,而是比较函数没有满足严格弱序,或调用方把等价元素的原顺序当成了保证。本文用订单优先级示例拆开 cmp 的返回值、重复元素处理和需要稳定排序的边界。223 收藏 -
Go 的 testing.AllocsPerRun 数值变化大时,先排查初始化、输入状态复用、并行测试和后台分配,再决定增加 runs 还是改用 benchmark。本文按测量边界、稳定输入和指标分工给出一套可执行的检查顺序。223 收藏 -
io.SectionReader 只能读取创建时指定的逻辑窗口。本文解释 [off, off+n) 边界、Read 与 ReadAt 的 EOF 表现,以及跨范围读取时如何选择扩大窗口或访问底层 ReaderAt。223 收藏 -
用 Go 的 hash.Hash 和 io.MultiWriter 把同一份字节分发给多个独立摘要实例,讲清 Sum 参数、结果命名、Reset 复用和摘要长度边界。223 收藏 -
从 Go 指针指向的内存内容与 C 是否跨调用保留地址两个边界,定位 cgo 指针规则 panic,并比较直接传字节、C 内存、cgo.Handle 和 runtime.Pinner 的安全写法。223 收藏