Go语言技术文章
-
对比 iter.Seq2 键值流的三种错误契约,给出可复用的泛型收集器,并说明 maps.Collect、终态错误与 Pull2 的边界。470 收藏 -
Go plugin 的 Lookup 找不到符号时,先区分插件打开失败与符号查询失败,再检查导出规则、名称拼写、构建方式和宿主插件的工具链一致性。470 收藏 -
Go database/sql 的连接等待不等于请求超时。本文用分阶段计时结合 DBStats 增量,区分获取连接与操作阶段失败,说明 MaxOpenConns、共享统计和上下文预算的判断边界。470 收藏 -
Go slog 不会自动把 context.Context 中的值写入日志。本文区分 Info 与 InfoContext、Logger.With 固定属性和自定义 Handler 读取上下文字段的边界,给出安全的排查与实现方式。470 收藏 -
解释 Go slog JSONHandler 遇到不可序列化值时为什么输出 !ERROR:json,并给出稳定摘要与 LogValuer 修正方式。470 收藏 -
通过一个Go事件分类器区分go test -json的普通输出、框架文本与多行报错,保留包和测试归属,并说明CI应独立传递测试退出状态。470 收藏 -
Go 随机字节的标准base64输入可直接兼容真实CR/LF。本文给出带输入上限、32字节约束、错误丢弃和规范化输出的示例,说明Strict、空白字符、填充与认证边界。470 收藏 -
Go http.Cookie 的 RawExpires 只保存读取到的原始 Expires 文本,Expires 才是可用于时间判断和重新序列化的 time.Time。本文说明两者的关系、解析失败边界以及如何在代理和审计代码中正确使用。470 收藏 -
用 Go log/slog 包装一个自定义 Handler,把请求上下文中的 request_id、tenant_id 等字段自动加入结构化日志,同时保留 JSONHandler 的级别过滤、静态字段和分组能力。470 收藏 -
Go 重写 AST 节点后,原注释不会自动跟随新节点。本文用 ast.CommentMap.Update 说明旧节点注释迁移、新节点已有注释合并、Filter 回归检查等实用边界。470 收藏 -
Go 中把带类型的 nil 指针直接返回为 error 时,接口仍会带着动态类型而非 nil。本文通过复现、拆解接口和值、修复返回分支与测试复查,说明如何稳定返回真正的 nil error。470 收藏 -
Go 1.27 扩展了泛型函数的类型推断场景。本文用函数类型赋值、类型转换和 channel send 三个边界,说明何时可以省略类型参数,以及旧代码迁移时如何核对。469 收藏 -
Go 项目可以用 go build 的 -ldflags=-X 在构建时写入版本号和提交号,再配合 -trimpath 减少本机路径差异。本文给出变量定义、脚本参数、可复现边界和发布前检查方法。469 收藏 -
讲清 Go time.Timer 复用时 Stop 返回值、旧语义排空 C 通道和 Go 1.23 新计时器语义的差异,并给出单一所有者的安全模板。469 收藏 -
Go 1.23 为 reflect.Value 增加了 Seq2,可把 map 统一为 key/value 序列,也能遍历数组、切片、字符串和双值迭代函数。本文从一次遗漏 map 值的故障出发,说明 CanSeq2 判断、各类型双值语义和提前停止边界。469 收藏