Go语言技术文章
-
Go 1.27 的 vet printf 分析器会提示一种容易被忽略的错误包装:错误类型本身实现了 error,却把指针作为 %w 操作数。本文解释它为何影响 errors.As,以及怎样修复并纳入持续检查。239 收藏 -
gofmt 在不同 CPU 架构上出现列对齐差异,通常是格式化器对齐决策的实现差异。本文说明 Go 1.27 的修复范围,并给出统一工具链、提交检查和升级处理方法。142 收藏 -
Go 1.27 为 go tool compile 增加 response file 支持。本文用一个具体编译场景说明如何用 @file 传递参数、处理引号与路径,并划清它和 go build 的边界。336 收藏 -
Go 1.27 的 atomictypes modernizer 可将适用的旧式原子函数访问迁移为强类型原子对象。本文说明限定分析器的命令、计数器迁移示例,以及初始化、对象复制、接口兼容和回归检查的边界。231 收藏 -
Go 1.27 及以上模块中,go mod tidy 可以把重复的 require 块整理为直接与间接依赖块。本文说明版本条件、注释归属、go.mod 与 go.sum 差异以及 CI 复核边界。254 收藏 -
Go 1.27 的 go fix 新增 slicesbackward modernizer,可把符合条件的手写切片反向循环迁移到 slices.Backward。本文说明如何预览变更、何时保留索引变量,以及生成文件和构建标签带来的边界。484 收藏 -
Go 1.27 为 go doc 增加 package@version 查询形式,可以在不修改当前 go.mod 的情况下读取指定模块版本的包文档。本文说明如何定位到具体符号、选择展示选项,并拆分工具链、路径和代理导致的失败。108 收藏 -
go doc -ex 会把包或符号关联的可执行示例纳入文档输出,适合快速查看示例源码;它不负责运行示例。本文说明 -ex 与默认查询、-src、-cmd 以及 go test 的边界。116 收藏 -
Go 实验性 simd 运算应按 Len 动态分块,并单独处理不足一向量的尾部。本文以 uint32 切片加法说明实验构建、宽度测试、数据契约与标量回退,避免把固定寄存器宽度写进可移植代码。421 收藏 -
Go testing/synctest 怎样让测试等待虚拟时间推进?本文用 bubble、time.Sleep 和 synctest.Wait 拆解虚拟时钟的推进条件,说明如何测试超时与后台 goroutine,以及网络 I/O 为什么不能直接依赖虚拟时间。145 收藏 -
Go 1.27 新增的 go/types.Hasher 为 types.Type 提供了与 Identical 一致的等价关系和哈希函数。本文说明如何接入 hash/maphash、何时选择 HasherIgnoreTags,以及为什么它适合进程内类型缓存而不适合密码学摘要或跨进程持久化键。150 收藏 -
使用 go/scanner 扫描 Go 源码时,Scanner.End 会返回当前已扫描 token 紧随其后的 token.Pos。本文说明怎样把它转换成行列和字节偏移,并处理首次调用、EOF、注释和文件长度边界。332 收藏 -
Go 的 token.File.String 会输出文件名与 Pos 范围,而不是行列号。本文用 FileSet、Base、End、Pos 和 Position 的关系,拆清格式化文件对象与定位源码位置的使用边界。417 收藏 -
Go 1.27 的 constant.StringLen 可直接计算字符串常量的字节长度,不必先提取完整内容。通过原创示例区分未知值与空串,说明字面量、拼接表达式、类型检查和报告缓存的适用边界。260 收藏 -
Go 1.27 为数据库驱动增加 RowsColumnScanner,让驱动可以按当前列直接写入用户目标。本文拆开 NextRow、ScanColumn、ScanContext 与旧版 Next 的职责,给出兼容实现骨架和接入边界。213 收藏