Go问答技术文章
-
Go ldflags 注入版本变量失败,应先核对包级字符串声明和完整符号路径,再检查引号、脚本覆盖与实际产物。给出 main.Version 最小示例和包内变量写法,区分链接期赋值与运行时覆盖。440 收藏 -
Go build tags 没有选中预期文件,通常不是标签失效,而是文件头位置、文件名后缀、布尔表达式、目标环境或 -tags 参数其中一层没有匹配。本文给出一套用 go list 定位实际文件集合的排查方法。107 收藏 -
Go 交叉编译在 CGO_ENABLED=1 时失败,通常不是 GOOS 或 GOARCH 写错,而是目标 C 编译器、sysroot 或原生库没有对齐。本文按基线、工具链、依赖和产物四层给出排查方法。100 收藏 -
Go 下载私有模块时出现 sum.golang.org 校验错误,通常是私有模块匹配规则没有配置,或把代理、校验数据库、仓库凭据三个问题混在了一起。本文按错误层级给出 GOPRIVATE、GONOSUMDB、GONOPROXY 的配置和排查方法。315 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · JSON · go · 故障排查 · 故障排查 Go encoding/json JSON指针 json.InvalidUnmarshalError
Go json.Unmarshal 的目标参数必须是非空指针。本文区分结构体值、nil 接口、nil 指针和指向指针变量的外层指针,并用 errors.As 识别 InvalidUnmarshalError,避免把参数错误与 JSON 语法或字段类型错误混为一谈。152 收藏 -
Go work 没有使用本地模块,通常不是本地代码没有更新,而是工作区没有被当前命令发现、use 没指向含 go.mod 的模块根目录、导入路径与 module path 不一致,或 GOWORK=off 关闭了工作区。本文按排查顺序给出修复方法。166 收藏 -
Go mod tidy 按当前模块源码与工具声明整理依赖,不把配置字符串或安装记录当作导入关系。通过模块归属、驱动空白导入、工具声明和构建标签解释依赖删除,并给出对应维护方法。252 收藏 -
Go 项目存在 vendor 目录却在构建时找不到模块,通常与主模块根目录、go.mod 版本条件、vendor/modules.txt 不一致或依赖未被收集有关。本文给出从定位主模块到选择 -mod 模式的排查路径。459 收藏 -
Go trace 文件过大通常与记录窗口太长、运行时事件密度高或用户标记过多有关。本文说明如何用短窗口、任务边界和 FlightRecorder 保留可分析的诊断片段,并区分 trace、pprof 与业务日志的分工。173 收藏 -
Go pprof CPU 图没有业务函数,通常不是 pprof 失效,而是采样窗口没有覆盖业务 CPU、符号化没有拿到匹配二进制,或过滤参数把业务节点隐藏。本文按资产、风险链路和复查动作给出排查顺序。243 收藏 -
Go 加上 -race 后变慢,主要来自访问插桩、同步关系跟踪和额外历史内存。本文说明如何固定 workload 比较性能,并用 GORACE 控制报告边界。469 收藏 -
Go benchmark 第一次结果特别慢时,先区分一次性初始化和被测操作,再用 ResetTimer 或 B.Loop 管理计时边界,避免把准备成本误判为性能回归。246 收藏 -
Go test -run 匹配的是测试名称而非文件名。通过包范围、正则锚点和子测试层级解释未执行现象,并区分缓存、跳过、未匹配与构建失败,给出准确命令及独立示例。124 收藏 -
Go httptest 默认使用系统选择的回环端口;出现端口被占用时,重点检查是否通过 -httptest.serve 或自定义 Listener 固定了地址,以及测试结束是否调用 Close。111 收藏 -
Go t.Parallel 本身不是随机失败的根因,真正危险的是并行测试共享了会变化的进程级状态。本文从生命周期、共享资产和隔离策略入手,给出可重复排查清单。124 收藏