Go问答技术文章
-
区分 PE 结构、COFF 符号、DWARF 与 Go 构建记录,使用只读检查器和同源构建对照定位链接参数影响,说明 -s、-w 的作用及信息缺失时能够保留的结论。203 收藏 -
Go 1.25 将 testing/synctest 正式纳入标准库。本文用并发回调和 context 超时场景说明如何用 bubble、Wait 与虚拟时间替代真实等待,并梳理网络阻塞、死锁和版本边界。413 收藏 -
Go 集成测试同时依赖被测包和上层组件时,可用 package foo_test 把测试放到依赖图上层,再用 export_test.go 提供有限的测试期辅助入口,避免 import cycle not allowed in test。293 收藏 -
Go vet 报告和编译器错误都可能返回非零状态,但处理边界不同。本文从包构建、静态分析、退出状态和 CI 分流几个角度说明如何判断与处理。151 收藏 -
需要确认 Go 当前是否带有编译实验开关时,先用 go env GOEXPERIMENT 查看有效配置。本文区分空值、显式实验名、none 与无效值,并说明 GOEXPERIMENT 的工具链开发边界。144 收藏 -
go test -run 匹配的是测试标识而不是文件名,未转义斜杠还会表达父子测试层级。本文说明普通片段、完整锚定、子测试选择、包位置、shell 引号与 -list 排查方法,帮助定位为什么目标用例没有命中。242 收藏 -
Go fuzz 测试发现失败输入后,会把最小化样本保存到 testdata/fuzz 目录。本文说明如何定位 corpus 文件、用 go test 自动复放,以及用 -run 精确复现单条输入。138 收藏 -
Go test -json 可将测试输出保存为逐行 JSON 事件。本文给出保留退出码和 stderr 的采集脚本,说明测试事件与构建事件的区别,以及运行标识、字段映射、并发归组和日志接入的注意事项。152 收藏 -
Go pprof 标签不见了,通常不是标签字符串失效,而是 profile 类型、标签作用域或采样窗口不匹配。本文按官方 runtime/pprof 语义,说明 pprof.Do、WithLabels、SetGoroutineLabels 的区别与排查顺序。301 收藏 -
testing/synctest bubble 使用独立虚拟时钟,只有当所有 goroutine 都进入持久阻塞时才跳到下一个定时器时刻。本文比较真实时钟、手写 fake clock 与 synctest 的边界,并用原创示例说明 Wait、Sleep、外部 I/O 和根 goroutine 退出的影响。127 收藏 -
解释 Go testing.Parallel、t.Run 与 Cleanup 的执行边界,帮助你安排测试夹具和资源释放,避免并行子测试提前清理共享资源。166 收藏 -
Go race 检测器需要 cgo,并不代表自动覆盖 C 库内部全部访问。本文区分 Go 共享状态、C 库内部并发与跨语言指针生命周期,给出串行封装和最小测试命令,说明无报告的适用范围。381 收藏 -
在 ARM、386 和 32 位 MIPS 上,直接使用 64 位 atomic 函数时需要由调用方保证地址对齐;atomic.Int64 和 atomic.Uint64 会自动对齐。本文结合结构体布局说明问题原因、改法和发布前检查项。162 收藏 -
计算接近零的 e^x-1 时,直接写 math.Exp(x)-1 可能丢失有效数字。本文用一个小型增长率场景说明消减误差,再给出 math.Expm1 的用法、特殊值边界和选择清单。351 收藏 -
Go ticker 不 Stop 是否一定导致资源泄漏,要区分 Go 版本、ticker 引用、后台 goroutine 和业务任务生命周期。本文给出跟随任务退出的写法与排查思路。292 收藏