Go问答技术文章
-
errors.Join 返回的是可遍历的错误树,业务判断应直接使用 errors.Is;需要展示全部原因时再读取 Unwrap() []error,不能依赖字符串拆分或 errors.Unwrap。495 收藏 -
Go io.ReadFull 读取固定长度消息时,空输入返回 io.EOF,读到一部分后提前结束返回 io.ErrUnexpectedEOF。本文用帧头、帧体示例说明如何分类处理短读、错误包装和重试边界。277 收藏 -
Go 读取标准输入遇到 io.EOF 通常表示输入自然结束,不是错误日志。本文用逐行读取和固定长度读取对比 EOF、真实 I/O 错误与 ErrUnexpectedEOF 的处理边界。195 收藏 -
Go 的 os.Getenv 无法区分环境变量未设置和显式空值,本文用 os.LookupEnv 保留 exists 状态,并给出默认值、校验和测试的处理方式。147 收藏 -
Go 的 0644 是 Unix 权限表达式。Windows 上 os.Chmod 只使用 0o200 位控制只读属性,用户和组级访问控制要交给 Windows ACL。137 收藏 -
Go 中 path 适合 URL 等正斜杠协议路径,filepath 适合 Windows 本地文件路径。本文说明反斜杠字符串写法,以及 ToSlash、FromSlash 的跨平台转换边界。159 收藏 -
Go 编译出现 undefined: C 时,先检查 import \"C\"、CGO_ENABLED、build tag 和 go list 文件清单,再区分 cgo 文件未入选与 C 声明缺失。183 收藏 -
Go 的 -ldflags -X 只能写入满足条件的包级 string 变量,不能修改 const。本文用最小示例说明正确声明、完整 import path、初始化边界和不生效时的排查方法。108 收藏 -
go build -trimpath 会移除可执行文件中的本机目录,但不会删除函数名、行号和调用栈。本文解释 runtime.Caller 如何读取裁剪后的逻辑文件名,并给出生产构建、本地调试与源码版本关联的选择方法。298 收藏 -
Go 私有模块下载出现 404 时,先判断请求落到了公共代理还是企业代理,再用 GOPRIVATE、GONOPROXY 和 GOPROXY 配置正确的下载边界。190 收藏 -
GOPROXY=direct 只负责让 Go 直接访问版本控制系统,私有模块的认证仍要交给 Git 的 HTTPS 凭据助手或 SSH;本文用一条请求链路说明如何配置和排查。213 收藏 -
go mod verify 检查本地模块缓存是否仍与 go.sum 记录一致,而 go.sum mismatch 是下载或校验阶段发现模块哈希不匹配。本文按校验对象、缓存边界和排查命令拆开说明。350 收藏 -
go.mod 的 replace 指向 ../local-module 时,开发机能编译并不代表发布环境也能找到该目录。本文从模块图和构建上下文解释失败原因,并给出 go.work、本地模块版本和发布前检查清单。499 收藏 -
Go module 的 pseudo-version 中间 14 位是修订创建时间的 UTC 表示,不是 author time。本文拆解基准版本、时间戳和提交哈希,并用 go list -m -json 核对实际依赖。240 收藏 -
Go fuzz 失败后会把可复现输入写入 testdata/fuzz 目录。本文说明如何区分 seed corpus 与缓存语料,用 go test 精确重放、理解最小化输入,并把失败文件保留为回归测试。116 收藏