在 Ubuntu 上用 Go(Golang)打包/构建 时调试,通常分为 构建阶段调试、运行时调试 和 打包(如 deb / snap / docker)阶段调试。下面按常见场景梳理,基本能覆盖 90% 的情况。
go version
go env
重点关注:
GOPATH / GOROOTGOOS / GOARCHCGO_ENABLED例如:
go env | grep -E "GOPATH|GOROOT|GOOS|GOARCH|CGO_ENABLED"
go build -x ./...
会打印:
✅ 适合排查:
go mod tidy
go mod graph
go mod why xxx
常见问题:
GOPROXY✅ 推荐配置:
go env -w GOPROXY=https://goproxy.cn,direct
如果涉及 C 代码:
CGO_ENABLED=1 go build -x .
查看:
gcc常见错误:
cannot find -lxxx
✅ 排查:
dpkg -l | grep libxxx
sudo apt install libxxx-dev
go install github.com/go-delve/delve/cmd/dlv@latest
dlv debug ./main.go
常用命令:
b main.main # 打断点
c # 继续
n # 下一步
s # 进入函数
p variable # 打印变量
✅ 适合:
go build -ldflags "-X main.Version=1.0.0 -X main.BuildTime=$(date)" main.go
代码中:
var Version string
var BuildTime string
✅ 常用于:
dpkg-buildpackage -us -uc -b
ls debian/tmp
go build 使用的是 root 用户GOPATH 在打包环境中不存在✅ 解决方法:
在 debian/rules 中显式设置:
export GOPATH=/usr/share/gocode
export GOFLAGS=-mod=vendor
docker build --progress=plain .
docker run -it <image-id> /bin/bash
✅ 常用技巧:
RUN go build -x ./...
snapcraft --debug
进入调试 shell:
snapcraft cleanbuild
| 问题 | 排查方式 |
|---|---|
| build 卡住 | go build -x |
| 找不到包 | go mod graph |
| CGO 报错 | CGO_ENABLED=1 go build -x |
| 依赖拉不到 | GOPROXY |
| 打包后程序不对 | -ldflags -X |
| 运行时 panic | dlv |
| deb 构建失败 | debian/rules + env |
# 1. 构建阶段
CGO_ENABLED=1 go build -x ./...
# 2. 运行阶段
dlv exec ./myapp
# 3. 打包阶段
dpkg-buildpackage -us -uc -b
如果你能贴出:
go build / go mod 的具体报错我可以给你一个 针对性的调试方案。