Go语言技术文章
-
用 sql.NullString 区分数据库 NULL、空字符串和普通文本,说明 String 与 Valid 的关系,并给出可空字段映射、扫描错误和查询无行的处理方式。172 收藏 -
用不连接数据库的最小示例区分 NULL、空字符串与普通文本,解释 sql.NullString.Valid、业务 JSON 映射及查询无行和扫描错误的处理。250 收藏 -
sql.Named 不会替你改写 SQL,占位符是否生效取决于驱动对命名参数的支持。本文从 database/sql 的参数传递过程出发,说明如何用 ns/op、B/op 和 allocs/op 记录批处理基线,并用预编译语句与可复用参数容器减少业务层额外分配。351 收藏 -
sql.Named 没有把 SQL 字符串改写成统一语法,命名参数是否生效取决于名称、占位符和数据库驱动三者是否匹配。本文用最小示例给出排查顺序。151 收藏 -
database/sql 中真正的 API 是 sql.Named,它返回 NamedArg;命名参数是否生效还取决于数据库驱动支持的占位符语法。本文从绑定链路、可复用查询示例和错误现象入手,说明如何在 :id、@id、$1、? 之间做正确选择。118 收藏 -
database/sql 的 DB.Stats 同时提供连接池当前状态和累计关闭计数。本文说明 MaxLifetimeClosed 与 MaxIdleTimeClosed、MaxIdleClosed 的区别,并用两次采样差值定位连接寿命回收。259 收藏 -
通过任务信封的 Gob 往返示例,区分具体类型登记、顶层接口编码形态、可写解码目标和导出字段,定位接口解码失败与结果为空的原因。322 收藏 -
Go 的 encoding/gob 在接口字段中传输具体值时,需要让编解码双方认识同一个具体类型。本文用 gob.Register 和可复用的注册函数说明解码失败的原因,并区分值类型、指针类型与未导出字段的边界。181 收藏 -
xml.Decoder.Token 匹配不上 XML 元素,通常不是前缀写错,而是把前缀当成了命名空间值。本文用 Go 代码说明如何按 Space 与 Local 正确匹配,并在批量解析中减少格式化和无意义复制。263 收藏 -
用 Go 的 xml.Decoder.Token 解析 XML 时,Space 保存的是命名空间 URL 而不是短前缀。本文用流式示例说明 Space 与 Local 的正确匹配方式,并排查默认命名空间、未声明前缀和 RawToken 的常见差异。137 收藏 -
使用 xml.Decoder.Token 读取带命名空间的 XML 时,Name.Space 保存的是命名空间 URI,而不是文档中的短前缀。本文从一个最小示例出发,说明如何按 URI 与 Local 组合匹配元素,并处理未知前缀与 RawToken 的边界。185 收藏 -
用信封与延迟载荷模式处理异构 JSON,给出逐条分发示例,并说明 RawMessage 复制成本、容量复用、缺失字段清零和异步所有权取舍。198 收藏 -
json.RawMessage 可以先保留不确定结构的 JSON 字段,再按 kind 选择具体结构体二次解析。本文拆分字段缺失、null、合法结构和类型不匹配,说明结果为空的常见原因与排查清单。295 收藏 -
用 json.RawMessage 暂存外层 JSON 中结构可变的 payload,先读取 kind 再选择 UserCreated 或 UserDeleted 等目标结构完成第二次解析,并区分未知类型、空字段和类型不匹配。121 收藏 -
bufio.Scanner 遇到超长行时,Scan 返回 false 不一定表示输入结束,也可能是 token 超过缓冲上限。本文说明如何读取 Err、在第一次 Scan 前配置 Scanner.Buffer,并按内存预算选择合理上限。362 收藏