Go问答技术文章
-
子测试调用 t.Parallel 后,直接包住它的 t.Run 就可以返回,父测试函数继续执行;子测试在 Parallel 之后的部分会暂停到父测试函数返回后再恢复,但父测试整体仍要等全部子测试完成。本文同时说明 defer、t.Cleanup 和分组等待的区别。420 收藏 -
Go 的 httptest.NewServer 关闭后仍有连接,通常要分别处理 Server、Response.Body 和 Client/Transport。本文用最小测试示例说明读取关闭响应体、关闭服务端和回收空闲连接的正确边界。419 收藏 -
Go 类型断言如何限定接口范围?本文说明具体类型断言与接口类型断言的区别,演示 comma-ok、安全探测、最小接口和 type switch 的取舍。419 收藏 -
Go exec.Cmd.Cancel 默认会直接 Kill 子进程。本文用自定义取消信号配合 WaitDelay,说明如何给子进程清理机会、限制管道等待,并正确判断取消后的错误边界。418 收藏 -
解释 Go generate 环境变量替换与参数边界的关系,说明带空格值、多个独立参数、字面美元符号和空变量的可靠写法。417 收藏 -
通过固定工作量对比 GOMAXPROCS,说明 CPU 配额、阻塞任务和运行时默认策略如何影响 Go 并发吞吐,并给出上线复核清单。417 收藏 -
QueryContext 超时后连接仍在 InUse,不一定是连接泄漏。本文从驱动取消能力、Rows.Close、Rows.Err 和 DB.Stats 四个角度说明如何定位回池延迟。416 收藏 -
Go 的 sync.Mutex 首次使用后不能复制。本文用结构体赋值和值接收者说明复制如何造成永久等待或保护失效,并给出指针接收者、go vet 与并发测试的修复清单。416 收藏 -
slog.WithGroup 只影响分组建立后追加的字段;JSONHandler 输出嵌套对象,TextHandler 则使用点号限定键名。本文用最小复现定位调用顺序、Group 混用和自定义 Handler 问题,并给出统一构造与测试方法。416 收藏 -
调整 GOGC 或 runtime/debug.SetGCPercent 后,延迟不会按固定方向变化。本文用固定工作负载、隔离的基准样本和延迟分位数,对照分析 GC 频率、堆空间、吞吐与 p95/p99 的关系。416 收藏 -
Go os.CreateTemp 的 pattern 不是完整文件名模板,而是带可选星号的前缀和后缀规则。本文用批次前缀、随机段和扩展名组成可追踪临时文件名,说明 Name、Write、Close、Remove 的配合方式,以及目录、权限和失败清理的边界。414 收藏 -
对比 Go filepath.IsLocal 与 filepath.Clean 的职责、边界输入和安全路径拼接方式,说明词法判断与真实文件系统检查不能混为一谈。414 收藏 -
Go 原生 fuzz 测试发现 panic 后,先固定失败语料并用 -run 稳定重放,再定位最小输入边界、修复校验逻辑,最后保留 corpus 作为回归测试资产。414 收藏 -
Go 编译缓存变大时,先用 go env 找到 GOCACHE 和 GOMODCACHE,再按构建、测试、模块下载和 fuzz 缓存分别选择 go clean 参数,避免误删依赖源码。412 收藏 -
FileHeader.Filename 是客户端提交的展示元数据,即使 Go 做了基础名处理,也不应直接决定服务器路径。本文用随机存储名、扩展名白名单和受控目录完成安全保存。412 收藏