Go语言技术文章
-
CommentMap 记录注释与 AST 节点的关联,但 go/printer 仍按 token.Pos 把 File.Comments 穿插到输出中。本文说明删除、替换和移动节点时注释错位的根因与修复方法。393 收藏 -
Go 的传统 encoding/json 会把 nil slice 编码为 null,把已初始化的空切片编码为 []。先由接口契约决定返回形状,再在成功响应的边界归一化并用测试锁定,避免前端空列表处理出现分支。392 收藏 -
Golang · Go教程 | 1个月前 | 并发 · 错误处理 · go · Context · context.WithTimeout context.Cause Go context.WithCancelCause
用一个可运行的 Go 请求链示例说明 context.WithCancelCause 如何区分主动取消、超时和上游失败,并给出错误判断、日志记录与兼容旧代码的检查方法。392 收藏 -
Go vet 默认只启用高置信度检查,shadow 变量遮蔽分析由 golang.org/x/tools 单独提供。本文解释它没有默认启用的原因、内外层 err 的风险、固定版本运行命令,以及接入 CI 时如何处理误报。392 收藏 -
用 go list -deps -json 导出当前构建条件下的包级依赖闭包,再通过 Imports 反查间接依赖的直接来源,并说明 DepOnly、Deps、构建标签和错误对象的边界。392 收藏 -
Go context.Value 适合携带请求级、跨 API 传播的元数据,不适合传业务参数或可选配置。本文用私有键类型、类型安全访问器和调用链示例划清使用边界。392 收藏 -
Go 用 bufio.Scanner 读取日志、CSV 或命令输出时,遇到超长行可能直接停止。本文用最小实验复现 token too long,解释 Buffer、MaxScanTokenSize、SplitFunc 的关系,并给出 Scanner 与 bufio.Reader 的选型边界。391 收藏 -
Go 的 log/slog 用 WithGroup 给字段划分命名空间,但 With、WithGroup 和单次 LogAttrs 的先后顺序会影响最终结构。本文用一个请求日志例子说明字段如何继承、重复键如何处理,以及自定义 Handler 应该怎样保持同样的语义。391 收藏 -
Go 1.22 改变了 range 循环变量的作用域。本文用 goroutine 闭包示例说明旧写法为何会读到同一个值、go.mod 如何决定语义,以及升级后怎样验证和清理多余代码。391 收藏 -
线上 Go 接口偶发超时,通常不是把超时时间调大就能解决。本文用一个订单查询场景演示如何沿 context 从 Handler 传到下游调用,结合日志和取消信号定位未结束的请求,并给出回滚与告警检查方法。391 收藏 -
reflect.VisibleFields 可以按 Go 的字段可见性规则枚举结构体字段,连同嵌入字段也能得到稳定的 Index 路径。本文用一个审计结构体示例说明如何读取字段、区分匿名字段和未导出字段,并处理重名与空结果边界。391 收藏 -
Go 解析 JSON 大整数时,map[string]any 默认会把数字放入 float64,可能改写末尾精度。本文比较结构体整数、json.Decoder.UseNumber 和字符串三种方案,帮助你按数据结构与运算需求选择正确做法。391 收藏 -
用 Go maps.Copy 合并默认配置和覆盖配置,明确 dst/src 的覆盖方向,处理 nil 目标 map,并说明嵌套切片等值的浅复制边界。391 收藏 -
Go net/netip 比较 IPv4 与 IPv4-mapped IPv6 时,应先用 Unmap 统一表示,再按 Addr 或 AddrPort 选择等值判断;本文说明 Is4、Is6、Is4In6、Compare 与端口边界。391 收藏 -
用 Go atomic.Int64.Add 的新值返回语义封装并发序号生成器,并说明顺序、溢出、复制和跨进程使用边界。391 收藏