Go问答技术文章
-
Go fuzz corpus 报格式错误时,先定位 testdata/fuzz 中的具体文件,再核对 go test fuzz v1、参数数量、类型与顺序,最后用单条语料完成最小复现。357 收藏 -
t.Parallel 不是把子测试函数立即丢到后台执行,而是在调用点暂停,等父测试函数返回后再进入并行阶段。理解这个边界,才能正确处理循环变量、共享资源和测试并发上限。256 收藏 -
Go t.Run 名称含斜杠时,-run 会把测试全名按斜杠分段匹配。本文用 HTTP/GET 案例说明分段正则、双斜杠空片段、默认不锚定与精确筛选的写法。180 收藏 -
Golang · Go问答 | 3星期前 | 单元测试 · 错误处理 · go · Go testing.T Cleanup失败 Go t.Cleanup错误处理 Go测试清理函数继续执行 Go测试失败不终止 Go测试资源释放排查
t.Cleanup 是测试结束阶段的清理回调,失败只会影响测试结果或当前清理函数,不会回到注册点打断已经继续执行的测试体。本文按执行时机、失败标记和清理顺序拆解排查方法。267 收藏 -
Go race 报告没有栈信息时,先区分没有触发竞态、历史栈恢复失败和日志截断,再用 go test 的 -run、-count、-cpu 与 GORACE 的 history_size、log_path 提高复现和定位效率。156 收藏 -
Go trace 的 scheduler latency 与 CPU profile 统计对象不同。本文用同一段负载采集两份画像,解释如何区分调度排队、CPU 热点和阻塞等待,并给出复采检查清单。460 收藏 -
从 Go pprof goroutine profile 的等待状态和栈顶函数入手,区分通道、锁、网络、定时器与可运行协程,并说明何时切换到 block、mutex profile 或 trace。330 收藏 -
Go finalizer 不是对象销毁通知。短命对象可能仍可达、回调尚未执行、属于零大小或 tiny 批分配、存在引用环,或者进程已退出。本文给出判断边界、KeepAlive 用法和更稳妥的资源释放选择。456 收藏 -
Go pprof 的 alloc_space 看累计分配,inuse_space 看最近一次 GC 后仍存活的内存。同一调用栈排名相反并不矛盾,关键是先确认对象生命周期,再用两个视图交叉判断。211 收藏 -
Go GC pacer 变慢不一定是内存泄漏:用 gctrace、运行时指标和 CPU profile 对照回收后存活堆与 GC 工作量,区分堆增长和 CPU 压力,再决定改分配路径还是调参数。161 收藏 -
runtime.KeepAlive 不是“调用前保活”开关,而是把对象的可达性保证到它所在的位置。本文用系统调用示例说明放错位置为何仍可能提前回收,以及如何把保护边界放在真正的调用之后。270 收藏 -
unsafe.SliceData 对空切片的结果取决于 nil 和 cap:nil 返回 nil,cap 为 0 的非 nil 空切片返回不确定地址,不能直接解引用;cap 大于 0 时才有首个 backing array 元素可谈。222 收藏 -
解释 Go 中 unsafe.Pointer 与 uintptr 的生命周期差异,说明为什么地址整数不能长期保存,并给出受限偏移、真实指针、索引和检查工具的可执行判断方法。330 收藏 -
Go 的 C 回调不能直接把函数值当作 C 函数指针传递。本文用导出函数、C 网关和 runtime/cgo.Handle 说明如何保持回调引用,并按同步、异步和并发注销场景判断安全释放时机。301 收藏 -
解释 Go runtime/cgo.Handle 删除后的有效性边界:C 端继续回传旧句柄时,Go 侧 Value 会触发 panic,并给出回调停止、所有权交接和重复释放的处理方式。345 收藏