Go教程技术文章
-
flag.TextVar 可以把命令行文本直接交给自定义类型的 UnmarshalText。本文以 LogLevel 为例,说明接口分工、默认值写法、错误处理,以及如何把同一解析规则复用于 JSON 配置。394 收藏 -
Go 自定义错误可实现 Is(error) bool,将多个动态错误码映射为稳定错误族。本文用可重试与资源不存在示例说明浅比较、错误包装和表驱动测试。239 收藏 -
errors.As 不只匹配具体错误类型,也能匹配错误链中实现某个接口的错误。声明接口变量并把其地址传入 errors.As,即可按能力处理不同实现,同时保留多层包装上下文。213 收藏 -
Go 1.20 的 errors.Join 可以同时保留主流程错误和多个资源清理错误,自动忽略 nil,并让 errors.Is、errors.As 继续遍历全部子错误。本文给出 defer 与集中清理两种实用写法。240 收藏 -
Go 的 encoding/json 默认会忽略结构体未声明的 JSON 键。要让接口在字段拼错或协议漂移时立即报错,可以使用 json.Decoder 并调用 DisallowUnknownFields,同时再解码一次确认请求体没有第二个 JSON 值。275 收藏 -
Go 处理超大 JSON 数组时,不要先 Unmarshal 成完整切片。本文用 json.Decoder.Token、More 和 Decode 按元素流式消费,并说明数字精度、嵌套结构与错误边界。127 收藏 -
Go 的 csv.Reader 默认会根据第一条记录检查后续列数。面对可选尾部字段或多版本 CSV,可把 FieldsPerRecord 设为 -1,再在业务层校验最少列、最大列和扩展字段,兼顾兼容性与数据质量。101 收藏 -
csv.Reader 的 FieldPos 可以把最近一次 Read 返回记录中的字段索引映射到 CSV 原文的起始行和字节列。本文说明正确调用时机、多行字段与中文列号的边界,以及 FieldPos 和 ParseError 的选择。167 收藏 -
Go encoding/csv 的 Reader.InputOffset 返回最近一条完整记录结束处的字节偏移。本文用可恢复的处理示例说明如何保存断点、校验文件并从安全边界继续读取。197 收藏 -
encoding/csv.Reader 的 ReuseRecord 可以复用上一轮记录切片的底层数组,减少大批量读取时的切片分配。本文给出逐行转换、分批写入与跨轮次复制的安全写法。342 收藏 -
Go 1.22 起可用的 database/sql.Null[T] 通过 V 和 Valid 保留 SQL NULL 语义。本文用 QueryRow、Rows.Scan 和写回参数说明可空字段的扫描方式、类型边界与常见误区。156 收藏 -
介绍 Go database/sql 中 sql.Named 的正确用法,讲清具名占位符、NamedArg、参数名前缀、驱动兼容性与错误处理,并给出可复用的多条件查询示例。138 收藏 -
讲清 Go database/sql 中 Rows.Next 返回 false 的双重含义,给出 Query、Scan、Rows.Err 和 Close 的错误边界与可复用代码模板,避免把迭代失败误判为正常结束。440 收藏 -
围绕 Go tls.Config 的 SetSessionTicketKeys,说明服务端会话票据密钥的默认自动轮换、手动 key ring、多副本同步、旧 key 移除和回滚边界。474 收藏 -
讲清 Go tls.Config.KeyLogWriter 的 NSS key log 用法、文件权限、连接复用边界和调试后的清理方式,帮助定位 TLS 抓包解密问题并避免密钥输出进入生产环境。304 收藏