-
Go 的 flag.String 适合单值参数;需要重复传入 -tag api -tag worker 时,可以定义实现 flag.Value 的字符串切片类型,在 Set 中 append 并通过 flag.Var 注册。本文说明重复参数、默认值、空值、错误和位置参数 Args 的边界。
-
Go runtime/trace 文件变大,通常不是压缩工具的问题,而是采集窗口覆盖了太长时间。本文用 trace.Start/Stop 缩短一次操作的采集范围,并介绍 Go 1.25+ FlightRecorder 的 MinAge、MaxBytes 与 WriteTo 用法。
-
保存时用 goimports 自动整理当前 Go 文件,提交和 CI 再用 gofmt -l、goimports -l 做只读门禁。本文说明两者职责、保存脚本、检查命令、生成文件边界和常见失败原因。
-
Go pprof 看不到热点时,先确认 CPU profile 类型和业务负载是否覆盖目标路径,再用 seconds 拉长采样窗口,最后结合 top、list、flat 和 cum 判断样本是否足够。
-
用 go/parser 和 go/ast 只收集 Go 源码中的导出函数声明,区分包级函数与方法,并用 format.Node 保留参数、返回值和类型参数。
-
Go slog 的 WithAttrs 属性没有出现在文本输出时,先区分整条日志被级别过滤,还是字段被 ReplaceAttr 或自定义 Handler 丢弃。本文用标准 TextHandler、包装 Handler 和分组检查清单定位问题。
-
Go generate 之后生成文件被格式化脚本改回旧内容,通常是生成器和外层脚本同时拥有最终写入权。本文用 go/format、临时文件和原子重命名整理一条稳定的生成流水线。
-
Go 的 net.Resolver 与 getent、dig、nslookup 可能走不同解析路径。本文用 GODEBUG、hosts/NSS、resolv.conf 和自定义 Resolver 分层定位差异,并给出可复查的修复方式。
-
Go 项目可以用 go build 的 -ldflags=-X 在构建时写入版本号和提交号,再配合 -trimpath 减少本机路径差异。本文给出变量定义、脚本参数、可复现边界和发布前检查方法。
-
Go TLS 握手失败时,先分开检查 TCP 连接地址、ServerName/SNI 和证书 SAN,再用 HandshakeContext 固定错误点、用 ConnectionState 读取证书链,最后在服务端记录 ClientHelloInfo.ServerName 定位虚拟主机选证书问题。
-
用 GOOS、GOARCH 和 CGO_ENABLED=0 为 Linux ARM64 构建纯 Go 程序,并说明遇到 import C 或外部 C 库时应如何判断和处理。
-
Go CookieJar 不保存服务端 Cookie,常见原因不是 Set-Cookie 消失,而是 Client 没有配置 Jar,或 Cookie 的域名、路径、Secure、过期时间与下一次请求 URL 不匹配。本文给出一套可复用的排查和修复写法。
-
Go build tags 可以通过 _GOOS、_GOARCH 文件名后缀和 //go:build 表达式,在编译期为 Linux、Windows、macOS 选择实现文件,并用 go list 与交叉构建确认结果。
-
Go 的 301、302、303 重定向会把 POST 改成 GET;本文解释 307/308、GetBody 与 CheckRedirect 的关系,帮助你避免请求体丢失和重复提交。
-
内网模块代理不是简单把 GOPROXY 改成一个地址。本文拆开逗号与竖线的回源规则,并说明 GOPRIVATE、GONOPROXY、GONOSUMDB 如何组合,避免私有模块泄露或代理故障被误判为没有回源。