温馨提示×

golang ubuntu编译要注意啥

小樊
47
2026-10-01 10:55:16
栏目: 编程语言

在 Ubuntu 上用 Go(Golang)编译程序,一般问题不多,但有几个常见坑和注意点,按使用场景给你总结一下:


一、环境相关

1. 安装 Go 的版本

Ubuntu 自带源里的 Go 通常比较旧:

go version

如果版本过低(比如 1.16 以下),建议:

  • 官方便携版(推荐):
wget https://go.dev/dl/go1.22.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.linux-amd64.tar.gz
  • 配置环境变量:
export PATH=$PATH:/usr/local/go/bin

2. GOPATH / GOMODULE

  • Go 1.16+ 默认开启 Go Modules
  • 推荐不要动 GOPATH,用 module 模式:
go mod init projectname
go build

二、编译本身注意点

3. 交叉编译(非常常用)

在 Ubuntu 编其他平台程序:

# Windows
GOOS=windows GOARCH=amd64 go build

# macOS
GOOS=darwin GOARCH=arm64 go build

⚠ 注意:

  • CGO 开启时不能随便交叉编译
  • 纯 Go 代码没问题

4. CGO 相关(重要)

如果你的项目用了:

  • sqlite
  • opencv
  • 某些加密库

那会启用 CGO:

CGO_ENABLED=1 go build

在 Ubuntu 上要注意:

sudo apt install gcc

否则会报错:

exec: "gcc": executable file not found

如果想完全静态编译:

CGO_ENABLED=0 go build

三、生成可执行文件相关

5. 静态编译(部署到容器很关键)

默认可能依赖 glibc:

ldd your_binary

想要静态:

CGO_ENABLED=0 go build -o app

Docker 里常用:

FROM golang:1.22 as build
CGO_ENABLED=0 go build

FROM alpine
COPY --from=build app /app

6. 减少二进制体积

go build -ldflags "-s -w"

还可配合 upx:

sudo apt install upx
upx app

四、权限 & 运行问题

7. 没有执行权限

chmod +x app
./app

8. 端口 & 防火墙

如果是 Web 服务:

sudo ufw allow 8080

五、常见报错速查

报错 原因
gcc not found 没装 gcc
cannot find package 没 go mod tidy
permission denied 没 chmod
not a dynamic executable 静态编译成功

如果你愿意,可以告诉我:

  • 是 本地编译 还是 Docker 编译
  • 是否用了 数据库 / C 库
  • 目标平台(Linux / Win / Mac)

我可以直接给你一套最合适的编译命令。

0 踩