Go问答技术文章
-
Go 处理 gzip 时要同时限制压缩输入和解压输出。本文用 io.LimitReader(maxOutput+1) 识别超限,并说明多成员、EOF、校验和与资源释放边界。498 收藏 -
Go 解包 tar 时,先把 Header.Name 当成不可信输入,拒绝绝对路径、.. 路径和链接条目,再用 filepath.IsLocal 与 filepath.Rel 把目标限制在根目录内;词法检查通过后仍要单独考虑符号链接和文件系统竞态。286 收藏 -
filepath.Clean 只做路径字符串的词法规范化,不能判断用户是否有权访问某个目录。本文用 Go 示例拆开 Clean、Rel、IsAbs 与符号链接检查的边界。437 收藏 -
Go 的 os.Rename 遇到跨文件系统路径时可能返回 invalid cross-device link。稳妥做法是在目标目录创建临时文件,用 io.Copy 完成复制并关闭后,再在目标文件系统内 Rename,最后成功才删除源文件。313 收藏 -
Go 文件写入时,Close 可能暴露延迟错误。本文解释如何保留 Write、Flush、Sync、Close 的错误,并给出 errors.Join 实现。235 收藏 -
使用 Go exec.Cmd.StdoutPipe 时,先 Wait 后读取可能在长输出场景阻塞。文章解释管道容量、子进程写端与父进程读端的关系,并给出单管道、双管道和直接缓冲输出的正确顺序。259 收藏 -
终端能运行而 Go os/exec 找不到程序,通常是 PATH、工作目录和绝对路径被混淆。本文用 LookPath、Cmd.Env 和 Cmd.Dir 拆开排查,并给出部署场景的稳妥写法。419 收藏 -
Go embed 报 pattern 没匹配到文件时,先检查声明文件所属包目录、相对路径、通配符和文件存在性,再用 go list 查看 EmbedPatterns 与 EmbedFiles。206 收藏 -
Go ldflags -X 注入空字符串时,先确认包级 string 变量,再用 go list 获取完整 import path,最后保留参数末尾等号并运行程序复核。207 收藏 -
Go build tags 没生效时,先用 go list 看文件是否进入 GoFiles,再分别检查 //go:build 的位置、表达式逻辑、文件名后缀和 -tags 参数。本文给出一套不依赖猜测的排查顺序。412 收藏 -
Go cgo 编译报找不到头文件时,如何通过 CGO_ENABLED、CC、include 路径和交叉编译器快速区分配置、路径与工具链问题。370 收藏 -
交叉编译启用 cgo 失败,通常不是 GOOS/GOARCH 写错,而是缺少目标平台 C 编译器、头文件、库或链接器。本文给出定位顺序、构建命令与纯 Go 替代方案。316 收藏 -
Go 项目新增依赖后,go.mod 已经变化但 -mod=vendor 仍然找不到包,通常是 vendor 目录和 vendor/modules.txt 没有同步。本文按检查、更新、复查三条线定位原因。388 收藏 -
Go replace 指向本地目录后 CI 找不到依赖,通常是替换路径在干净 runner 中不可见。本文用相对路径、go.work 和可访问模块三种方案说明如何修复,并给出提交前的反向检查。448 收藏 -
GOPROXY=off 不是使用本地缓存的开关,而是禁止 go 命令从任何来源下载模块。本文从 GOMODCACHE、go.sum、vendor 和 file 代理几个边界说明新依赖失败的原因,并给出可复现的离线构建处理方式。155 收藏