Go语言技术文章
-
说明 Go bytes.Buffer.Next 的参数超过未读长度时会返回全部剩余字节并耗尽缓冲区,进一步解释切片有效期、精确定长读取和空缓冲边界。456 收藏 -
在 Go 服务之间使用 OpenTelemetry 时,HTTP 客户端和服务端 Span 不是靠 URL 或时间戳硬拼,而是依靠传播的 Trace Context 建立父子关系。本文用 otelhttp 拆解注入、提取和常见失配原因。456 收藏 -
Go database/sql 读取多个 SQL 结果集时,要在每组内部用 Rows.Next 遍历行,当前组结束后用 NextResultSet 切换,并在每次切换后重新调用 Next;本文给出两层循环、空结果集和错误处理写法。456 收藏 -
Go range 中直接保存 &value,可能把循环变量副本的地址重复保存,导致多个指针看起来指向同一个对象。本文从切片、map、闭包和 Go 1.22 模块语义四个边界排查原因,并给出稳定的下标取址与独立副本写法。456 收藏 -
Go map 判断指定键是否存在,要使用 comma-ok 双值写法;本文用最小示例说明零值、缺键、nil map 与并发访问的边界。456 收藏 -
Go mime.TypeByExtension 需要传入带点的文件扩展名,未知映射返回空字符串,并可能受到系统 MIME 数据影响。本文从文件名提取、大小写处理、自定义映射和上传安全边界四个方面说明如何正确使用。456 收藏 -
Go 的 time.Ticker.Reset 会从新时长重新安排下一次 tick,但慢接收者、未执行到 Reset 或并发修改都会让观察结果像是旧周期仍在生效。本文用最小示例拆开这些原因,并给出单一重置入口与日志复查方式。456 收藏 -
Go 使用 x/text/message Printer 配合 language.Tag 输出地区化数字。本文比较 Printer、fmt 和显式格式化的适用边界,说明 Printf、Sprintf、%d、%f、%g 以及 # 标记的选择。456 收藏 -
Go x/image/font/opentype 中 Size 是点值,DPI 是输出分辨率;两者共同决定 Face 的缩放比例。本文用源码关系、Metrics、GlyphBounds 和绘制坐标说明为什么字号不变时修改 DPI 会让字形变大,并给出参数选择策略。456 收藏 -
Go select 一旦包含 default,在没有可进行通信时就会立即执行。把它放进消费 for 循环会让循环持续重试,表现为 CPU 升高但没有有效消费。本文从故障症状、阻塞式修复、取消与关闭 channel 处理,到必须轮询时的退避边界,给出一套可直接套用的处理方式。456 收藏 -
用 embed.FS 把 Goose SQL 迁移打进 Go 程序,说明目录保留、SetBaseFS、数据库方言与连接配置,提供完整迁移命令,并解释重新构建、只读文件和发布执行责任。456 收藏 -
go-pretty/table 的 RowPainter 接收整行并返回 text.Colors,适合按状态或排序位置统一着色。本文说明回调契约、SetRowPainter 的覆盖关系、RowPainterWithAttributes 的行号语义,以及空行和禁色场景的处理。456 收藏 -
Go netlink 的 AttributeEncoder.Nested 用嵌套编码器封装一组子属性,并自动设置 Nested 标志。本文从属性编号、字节序、编码错误到 Nested 解码,给出一套可维护的嵌套字段写法和发布前检查清单。456 收藏 -
Go reflect 查到未导出字段不代表能调用 Interface 或 Set。本文区分字段存在、导出、可寻址与可修改,给出返回明确错误的读取示例及公开接口替代方案。456 收藏 -
使用 Go image/gif 的 DecodeAll 读取 GIF 全部帧,导出每帧 Delay、可读播放时长和 LoopCount 循环语义,并说明 Decode 与 DecodeAll 的迁移边界。456 收藏