-
json.Number 保存的是 JSON 数字原文,而 Int64 内部按十进制整数调用 strconv.ParseInt。1.5、1e3 虽是合法 JSON 数字,却不是 Int64 接受的整数文本;超出 int64 范围则会返回 range error。
-
Go 1.20 的 errors.Join 可以同时保留主流程错误和多个资源清理错误,自动忽略 nil,并让 errors.Is、errors.As 继续遍历全部子错误。本文给出 defer 与集中清理两种实用写法。
-
json.Decoder.More 只回答当前数组或对象里是否还有元素,不能单独判断顶层 JSON 流是否还有数据。本文区分 More、Token、Decode 与 io.EOF 的边界,并给出遍历容器、读取连续顶层值和拒绝尾随数据的写法。
-
Go 的 encoding/json 默认会忽略结构体未声明的 JSON 键。要让接口在字段拼错或协议漂移时立即报错,可以使用 json.Decoder 并调用 DisallowUnknownFields,同时再解码一次确认请求体没有第二个 JSON 值。
-
FieldsPerRecord 设为 0 不是关闭校验,而是让 encoding/csv 用第一条记录的字段数作为后续标准,因此列数变化仍会返回 ErrFieldCount。真正允许变长记录应设为负数;引号等 CSV 语法错误则不会被该设置忽略。
-
Go 处理超大 JSON 数组时,不要先 Unmarshal 成完整切片。本文用 json.Decoder.Token、More 和 Decode 按元素流式消费,并说明数字精度、嵌套结构与错误边界。
-
Go csv.FieldPos 的 column 按 UTF-8 字节计算,不按字符计算。本文用中文 CSV 说明字段起点、解析错误和展示层字符位置如何分开处理。
-
Go 的 csv.Reader 默认会根据第一条记录检查后续列数。面对可选尾部字段或多版本 CSV,可把 FieldsPerRecord 设为 -1,再在业务层校验最少列、最大列和扩展字段,兼顾兼容性与数据质量。
-
csv.Reader.InputOffset 返回输入流当前读取位置,也就是最近一条记录的末尾与下一条记录的开头,不是字段坐标。本文说明它与 FieldPos、ParseError 的区别,以及如何用记录边界实现可靠的 CSV 进度检查点。
-
csv.Reader 的 FieldPos 可以把最近一次 Read 返回记录中的字段索引映射到 CSV 原文的起始行和字节列。本文说明正确调用时机、多行字段与中文列号的边界,以及 FieldPos 和 ParseError 的选择。
-
csv.Reader 开启 ReuseRecord 后,连续 Read 可能共享上一条记录的底层数组,因此保存旧切片会看到内容变化。本文用对比示例说明何时可以直接复用、何时必须复制,以及缓存和 goroutine 场景的安全写法。
-
Go encoding/csv 的 Reader.InputOffset 返回最近一条完整记录结束处的字节偏移。本文用可恢复的处理示例说明如何保存断点、校验文件并从安全边界继续读取。
-
sql.Null[T] 的 V 字段即使在 Valid=false 时也必须持有类型 T 的 Go 零值,但这不代表数据库存了零值。本文说明 V、Valid 与 Value() 的语义,并给出避免误判 SQL NULL 的写法。
-
encoding/csv.Reader 的 ReuseRecord 可以复用上一轮记录切片的底层数组,减少大批量读取时的切片分配。本文给出逐行转换、分批写入与跨轮次复制的安全写法。
-
sql.NamedArg 只把名称和值交给 database/sql 与具体驱动,并不会统一不同数据库的命名占位符。本文说明名称校验、驱动能力和 SQL 语法三个拒绝点,并给出可直接套用的排查代码。