Go问答技术文章
-
Go test 输出 cached 并不等于测试失效,而是成功的包测试结果被复用。本文说明如何用 -count=1 强制重跑、用 -run 和 -v 定位目标,以及何时使用 go clean -testcache。496 收藏 -
迁移 Go 构建约束时,//go:build 与 // +build 必须表达同一条件;理解空格、逗号和多行的逻辑,再用 gofmt、go vet 和跨平台构建检查结果。496 收藏 -
Go 类型别名只是原类型的另一个名字,定义类型则创建独立类型;本文用类型身份、接收者和接口断言解释两者的方法集差异。496 收藏 -
Go 容器内存限制不是把 SetMemoryLimit 当成硬上限,而是先给 cgroup 预留运行时和外部内存,再用 GOMEMLIMIT 或 SetMemoryLimit 约束 Go runtime 的软目标。本文按预算、配置、观测和回退步骤给出可复用做法。496 收藏 -
Go 1.22 及更高版本可以用 http.Request.SetPathValue 在单元测试中注入路径变量,再通过 PathValue 让处理器按生产代码读取。本文区分处理器测试与 ServeMux 路由测试,并说明空值、覆盖和编码边界。496 收藏 -
Go 的 t.Run 会为同名子测试自动追加序号保证唯一,但日志仍可能难以区分业务场景。本文用稳定字段组合测试名,改善失败定位和 -run 筛选。496 收藏 -
Go build tags 选错实现文件时,先确认 GOOS、GOARCH、CGO_ENABLED,再用 go list 对照 GoFiles 与 IgnoredGoFiles,最后检查文件名后缀、//go:build 表达式和 -tags 参数是否一致。496 收藏 -
Go regexp 中文匹配为空时,按输入、UTF-8 码点、ASCII 字符类、Unicode 类和字节下标逐项排查,解决中文匹配与位置错位问题。496 收藏 -
Go ldflags -X 没有把版本信息写进二进制时,先检查参数引号、目标变量声明和 importpath.name,再用可执行文件的版本入口做发布前确认。496 收藏 -
Go UUID 的 NewSHA1 会把命名空间 UUID 和名称字节一起计算为 UUID v5。同一个名称换了命名空间,输入域就变了,因此得到不同标识。本文说明固定命名空间、稳定编码和迁移边界。496 收藏 -
Gonum quad.Fixed 使用固定节点数和权重近似定积分,但 n 只是采样规模,不是误差估计器。本文解释规则假设、相邻节点收敛对照、区间分段和 concurrent 参数的边界,帮助你判断结果是否足够稳定。496 收藏 -
errors.Join 返回的是可遍历的错误树,业务判断应直接使用 errors.Is;需要展示全部原因时再读取 Unwrap() []error,不能依赖字符串拆分或 errors.Unwrap。495 收藏 -
Go bufio.Scanner 报 too many empty tokens,通常不是缓冲区太小,而是自定义 SplitFunc 在 EOF 下反复返回未推进的非 nil token。本文用返回值关系说明根因、修复方式和 Reader 的适用边界。495 收藏 -
Go 服务出现内存指标突增时,不能只看 Sys 或单次 HeapAlloc。本文用 runtime.MemStats 建立采样快照,结合堆保留、对象数量、GC 次数和分配速率区分短时峰值、缓存保留与持续增长。495 收藏 -
bufio.Reader.WriteTo 返回的是已复制字节数 n 和复制错误 err。目标 Writer 可能在部分写入后失败,调用方应同时保存 n 与 err,并区分完整复制、目标写入失败和源读取失败。495 收藏