Go问答技术文章
-
Go 配置中的 500ms、2s 和 1m30s 不能按普通整数读取。本文用 time.ParseDuration 拆开格式边界、错误处理、负数与溢出问题,并给出启动阶段集中校验的写法。432 收藏 -
CGO_ENABLED=0 会让 cgo 构建约束失效。本文从环境确认、文件筛选到纯 Go 实现配对,说明如何定位“找不到实现”并稳定检查两条构建分支。329 收藏 -
Go build tags 选错实现文件时,先确认 GOOS、GOARCH、CGO_ENABLED,再用 go list 对照 GoFiles 与 IgnoredGoFiles,最后检查文件名后缀、//go:build 表达式和 -tags 参数是否一致。496 收藏 -
Go 下载依赖卡在 sum.golang.org 时,先区分模块代理和校验数据库的网络边界,再按公共模块、私有模块或内网代理选择 GOPROXY、GOSUMDB、GOPRIVATE 与 GONOSUMDB,避免用全局关闭校验掩盖配置问题。290 收藏 -
Go replace 指向本地路径在 CI 失效,通常是 checkout 范围、相对路径基准、替代目录 go.mod 或主模块作用域不一致。本文按主模块、模块文件、require/replace 配对和流水线输入给出排查与修复顺序。224 收藏 -
Go 拉取模块失败时,先检查 go.mod 的 module 声明是否与仓库根路径、包导入路径和 /v2 主版本规则一致,再决定改 module、改 import 还是使用 replace。192 收藏 -
围绕 ResponseWriter 包装导致的 http.Flusher 断言失败,说明安全断言、Unwrap 透传和 ResponseController 兜底的兼容写法。103 收藏 -
Go build -ldflags 传入带空格的 -X 参数,需要同时保留 shell 实参和 Go 内层赋值字段。本文给出完整赋值加引号的最小写法、受控构建标签示例,以及变量路径、输入范围与发布日志的检查要点。273 收藏 -
Go 项目同时存在 vendor 和 module cache 时,构建到底读取哪份依赖?本文用 go env、go list 和 -mod 参数定位选择模式,解释 GOFLAGS、go.mod 版本与 vendor/modules.txt 的关系。275 收藏 -
Go 项目在本地用 replace 指向兄弟目录时,开发机可能因为目录和 go.work 存在而编译通过,CI 却在依赖解析阶段失败。本文解释相对路径、require、go.work 与 GOWORK=off 的边界,并给出从本地联调迁移到正式模块版本的做法。445 收藏 -
Go database/sql Tx 提交后查询不一致时,分开记录事务内读取、Commit回执与事务外新查询,核对查询入口、错误阶段、数据源和主键条件,避免误判提交失败或盲目重试。450 收藏 -
无缓冲 channel 的发送不是把值先放到队列里,而是要等接收方就绪。本文从最小复现出发,按接收未启动、接收提前退出和 nil channel 三条路径定位发送卡住,并给出带取消边界的接口写法。272 收藏 -
io.Pipe 写入阻塞常与同步背压、消费者提前退出及关闭责任有关。本文给出一读一写的完整示例,说明消费失败如何关闭读端通知写端,并比较 Pipe、内存缓冲和有界队列的适用边界。468 收藏 -
Go exec.Command 找不到程序时,先区分父进程 PATH、命令解析和子进程 Env。本文用 LookPath、Cmd.Path 与 os.Environ 逐层排查,并说明什么时候必须改成绝对路径。487 收藏 -
Go text/template 中变量输出为空,常见原因不是模板语法,而是 range、with 改变了点号上下文,或子模板没有显式收到数据。本文用最小示例拆开 dot、$、变量和字段访问的作用域边界,并给出可复用的排查清单。458 收藏