Go问答技术文章
-
Go slog 的 JSON 时间格式取决于字段来源、时区与布局。通过 ReplaceAttr 将内置日志时间改为 UTC 固定毫秒字符串,并区分业务时间、分组字段、零值记录及采集端类型兼容。491 收藏 -
Go slog 不会自动把 context.Context 中的值写入日志。本文区分 Info 与 InfoContext、Logger.With 固定属性和自定义 Handler 读取上下文字段的边界,给出安全的排查与实现方式。470 收藏 -
Go CommandContext 默认只取消 Cmd 对应的直接进程,shell 派生的孙进程和仍持有 stdout/stderr 的 I/O 管道可能让 Wait 继续等待。本文解释取消边界、进程树与管道回收,并给出直接执行、进程组和 WaitDelay 的选择方法。448 收藏 -
Go 服务收不到 SIGTERM,通常不是信号本身失效,而是目标 PID、signal.Notify 注册、容器 PID 1 或退出清理边界出了问题。本文给出一套从进程到 supervisor 的排查顺序。198 收藏 -
Go FlagSet 的 ContinueOnError 不等于静默,SetOutput 才配置诊断去向。通过独立缓冲区示例说明如何捕获输出,区分自定义 Usage、全局集合、外层日志和帮助请求,避免重复打印或丢弃错误。348 收藏 -
Go filepath 会按照编译目标操作系统选择路径分隔符和绝对路径规则,因此 Join、Clean、IsAbs 等结果可能与开发机不同。本文区分本地文件系统路径和斜杠协议路径,并给出 path、ToSlash、FromSlash、Abs 与 Rel 的使用边界。420 收藏 -
Go DirFS 只保证从指定目录开始打开文件,不会自动阻止符号链接越过根目录。本文区分 fs.ValidPath 的词法检查与真实文件边界,并给出 Go 1.24 起使用 os.OpenInRoot 和 os.Root.FS 的处理方式。153 收藏 -
Go embed 读取模板时报路径不存在,通常不是文件没打进二进制,而是 //go:embed 模式、FS 内部路径和 ParseFS 参数不在同一层级。本文用几个最小结构说明如何定位并修正。258 收藏 -
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问答 | 2天前 | 标准库 · 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 收藏