Go语言技术文章
-
Go 1.27 会整理 go.mod 中多个 require 块。本文从升级后的差异现场出发,说明 direct 与 indirect 分组的触发条件、验证方法和 CI 防复发做法。331 收藏 -
Go 1.23 引入的 slices.Collect 会把 iter.Seq 收集为新切片,但空序列返回 nil,容量也不是 API 承诺。本文拆开 nilness、容量、元素别名和重复消费边界,给出稳定测试写法。416 收藏 -
Go 1.27.1 是小版本升级,但官方修复范围触及 cgo、编译器、runtime 和多个标准库。本文把这些范围映射成构建、运行与接口行为回归矩阵,帮助项目决定直接升级、灰度还是保留临时回退开关。240 收藏 -
Go 1.27 调整 go tool trace 的 -http 监听默认值。本文对比 :6060、127.0.0.1:6060 与 0.0.0.0:6060,说明本机和远程调试如何保留清晰的访问边界。293 收藏 -
Go 1.27 的 httptest.NewTestServer 把 HTTP 测试接入内存网络,适合和 testing/synctest 一起验证并发、超时与取消语义,但它不替代真实网络和部署验收。221 收藏 -
Go 1.27 简化了函数文字符号名,并可能合并内联后的同一函数文字。升级后不要再用符号名或函数代码指针判断闭包身份,改用稳定的行为断言和显式测试标识。279 收藏 -
从 AddSource、Level 和 ReplaceAttr 三个配置点拆解 Go slog 的日志字段成本,给出保留源位置、裁剪路径和验收输出的实用方法。287 收藏 -
slices.SortStableFunc 并不会替你修正比较函数。本文从负、零、正返回值、相等元素保序和严格弱序三个边界,说明怎样写出可检查的稳定排序比较器。416 收藏 -
Go 1.27 改进 compress/flate 编码速度后,同一输入的压缩字节可能变化,gzip、zip、zlib 和 png 也可能出现派生差异。本文从 CI 快照失败入手,给出区分字节变化与数据损坏的检查方式,并把测试改成稳定的语义断言。101 收藏 -
Go 1.27 调整 go tool trace -http 的默认监听行为。本文用一个小型诊断工具说明只写端口、显式写 localhost 和绑定远程地址的差异,并给出升级后可复查的监听边界清单。338 收藏 -
context.Err 和 context.Cause 不是同一个答案。本文用父子 Context、首个取消者和原因转发三个边界,说明为什么只能得到 context.Canceled,以及日志该如何记录。473 收藏 -
Go 1.27 将 unicode 包及相关支持从 Unicode 15 升到 Unicode 17。本文用 RangeTable、IsLetter、IsDigit 和 UTF-8 校验拆开说明升级后业务字符规则的回归边界。185 收藏 -
看到 Go 服务里的 channel 阻塞,先别急着判定 goroutine 泄漏。本文比较普通 goroutine 栈与 Go 1.27 goroutineleak profile 的证据边界,给出一套可复核的排查和上线清单。160 收藏 -
Go 1.27 的 go/constant.StringLen 能在不完整构造字符串的情况下计算字符串常量长度。本文用最小示例说明它与 StringVal 的区别、UTF-8 字节边界、Unknown 行为、非字符串 panic 以及旧版本降级方式。301 收藏 -
Go 1.27 会让 go.mod 中 go 1.27 及以上的模块在 traceback 首行显示 runtime/pprof goroutine 标签。本文区分标签来源和展示开关,并给出 go.mod、go.work、//go:debug 与 GODEBUG=tracebacklabels=0 的控制边界。295 收藏