1. 依赖管理问题
go mod init <module-name>(如go mod init github.com/user/project);go get -u <package-path>(如go get -u github.com/gin-gonic/gin)自动下载并更新依赖;go mod tidy自动移除未使用的依赖并添加缺失的依赖;GO111MODULE=on(默认值,Go 1.16+已开启)以强制使用Modules。2. CGO与静态编译问题
-lopus)。CGO_ENABLED=1),生成的二进制文件依赖系统C库(如glibc);目标环境缺少对应的C库(如Alpine使用musl libc)。CGO_ENABLED=0(如CGO_ENABLED=0 go build -o myapp),强制静态编译;-ldflags="-extldflags -static"增强静态编译(如CGO_ENABLED=0 go build -ldflags="-extldflags -static" -o myapp);golang镜像编译,第二阶段复制二进制到scratch或alpine镜像(避免依赖C库)。3. 环境变量配置错误
GOOS/GOARCH导致生成错误的二进制文件)。GOROOT、GOPATH、PATH)未配置;交叉编译时未设置目标平台变量。go version确认Go已安装;若未安装,通过sudo apt-get install golang(Ubuntu官方源)或下载官方tar包安装;~/.bashrc或~/.zshrc中添加export GOROOT=/usr/local/go(Go安装路径)、export GOPATH=$HOME/go(工作目录)、export PATH=$PATH:$GOROOT/bin:$GOPATH/bin,然后运行source ~/.bashrc生效;GOOS=linux、GOARCH=amd64),例如GOOS=linux GOARCH=amd64 go build -o myapp-linux(生成Linux 64位二进制文件)。4. 文件权限问题
chmod +x myapp(myapp为二进制文件名);chmod -R +w /path/to/directory(谨慎使用,避免安全风险);sudo -u <username> ./myapp(如sudo -u www-data ./myapp)。5. 代码兼容性问题
any关键字(替代interface{})时,在Go 1.17及以下版本编译失败;使用新版本标准库特性(如os.ReadFile替代ioutil.ReadFile)时,在旧版本运行失败。go version检查);go.mod文件中添加go 1.21(如module github.com/user/project下方添加go 1.21),限制代码使用的Go版本;6. Docker打包常见问题
COPY路径错误;多阶段构建未正确复制文件。CGO_ENABLED=0生成静态二进制文件;golang镜像编译,第二阶段复制二进制到轻量级镜像(如scratch或alpine);COPY命令中的源路径(项目内路径)与目标路径(镜像内路径)正确,例如COPY --from=builder /app/myapp /myapp(builder为第一阶段名称,/app/myapp为编译后的二进制路径)。7. 编译缓存问题
$GOCACHE,通常为~/.cache/go-build),无需额外设置;go clean -cache清除编译缓存(如修改代码后需重新编译);GOCACHE=/path/to/cache(如export GOCACHE=/tmp/go-cache)。