Go语言技术文章
-
Go csv.FieldPos 的 column 按 UTF-8 字节计算,不按字符计算。本文用中文 CSV 说明字段起点、解析错误和展示层字符位置如何分开处理。389 收藏 -
Go 的 csv.Reader 默认会根据第一条记录检查后续列数。面对可选尾部字段或多版本 CSV,可把 FieldsPerRecord 设为 -1,再在业务层校验最少列、最大列和扩展字段,兼顾兼容性与数据质量。101 收藏 -
csv.Reader.InputOffset 返回输入流当前读取位置,也就是最近一条记录的末尾与下一条记录的开头,不是字段坐标。本文说明它与 FieldPos、ParseError 的区别,以及如何用记录边界实现可靠的 CSV 进度检查点。225 收藏 -
csv.Reader 的 FieldPos 可以把最近一次 Read 返回记录中的字段索引映射到 CSV 原文的起始行和字节列。本文说明正确调用时机、多行字段与中文列号的边界,以及 FieldPos 和 ParseError 的选择。167 收藏 -
csv.Reader 开启 ReuseRecord 后,连续 Read 可能共享上一条记录的底层数组,因此保存旧切片会看到内容变化。本文用对比示例说明何时可以直接复用、何时必须复制,以及缓存和 goroutine 场景的安全写法。240 收藏 -
Go encoding/csv 的 Reader.InputOffset 返回最近一条完整记录结束处的字节偏移。本文用可恢复的处理示例说明如何保存断点、校验文件并从安全边界继续读取。197 收藏 -
sql.Null[T] 的 V 字段即使在 Valid=false 时也必须持有类型 T 的 Go 零值,但这不代表数据库存了零值。本文说明 V、Valid 与 Value() 的语义,并给出避免误判 SQL NULL 的写法。497 收藏 -
encoding/csv.Reader 的 ReuseRecord 可以复用上一轮记录切片的底层数组,减少大批量读取时的切片分配。本文给出逐行转换、分批写入与跨轮次复制的安全写法。342 收藏 -
sql.NamedArg 只把名称和值交给 database/sql 与具体驱动,并不会统一不同数据库的命名占位符。本文说明名称校验、驱动能力和 SQL 语法三个拒绝点,并给出可直接套用的排查代码。233 收藏 -
Go 1.22 起可用的 database/sql.Null[T] 通过 V 和 Valid 保留 SQL NULL 语义。本文用 QueryRow、Rows.Scan 和写回参数说明可空字段的扫描方式、类型边界与常见误区。156 收藏 -
解释 Go database/sql 中 Rows.Next 返回 false 的双重语义,给出 Next、Scan、Err、Close 的正确组合,并说明如何避免迭代失败时静默返回半截数据。171 收藏 -
介绍 Go database/sql 中 sql.Named 的正确用法,讲清具名占位符、NamedArg、参数名前缀、驱动兼容性与错误处理,并给出可复用的多条件查询示例。138 收藏 -
解释 Go sql.Conn.Raw 中 driverConn 的借用生命周期,说明为什么不能跨回调保存底层驱动连接,并给出同步调用、结果复制与 ErrBadConn 处理的安全模板。269 收藏 -
讲清 Go database/sql 中 Rows.Next 返回 false 的双重含义,给出 Query、Scan、Rows.Err 和 Close 的错误边界与可复用代码模板,避免把迭代失败误判为正常结束。440 收藏 -
Go tls.Config 的 KeyLogWriter 能把 TLS 会话密钥写成 NSS key log 格式,方便 Wireshark 解密抓包,但长期启用会扩大密钥泄露面。本文给出受控调试、抓包定位和结束清理的完整做法。248 收藏