温馨提示×

ubuntu下golang编译要注意什么

小樊
41
2026-10-24 23:08:21
栏目: 编程语言

在 Ubuntu 下使用 Golang 编译程序时,有几个常见但容易忽略的点,下面按环境、编译、依赖、部署几方面总结:


一、环境与版本相关

1. 使用官方 Golang,而不是 apt 旧版本

Ubuntu 自带的 golang 通常较旧:

sudo apt install golang
go version

建议从官网下载:

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 / GOMOD

  • Go 1.11+ 推荐使用 Go Modules
go env -w GO111MODULE=on
  • 项目内:
go mod init example.com/project
go mod tidy

二、编译参数与平台相关

3. 交叉编译(常见)

在 Ubuntu 编译其他平台程序:

# Windows
GOOS=windows GOARCH=amd64 go build -o app.exe

# macOS
GOOS=darwin GOARCH=arm64 go build

查看支持平台:

go tool dist list

4. 静态编译(部署到无环境服务器)

默认 Go 已是静态链接,但 CGO 会破坏:

CGO_ENABLED=0 go build

否则可能报:

not found libc.so

5. 缩小二进制体积

go build -ldflags "-s -w"

进一步可用 upx:

upx app

三、依赖与权限问题

6. GOPROXY 设置(国内重要)

go env -w GOPROXY=https://proxy.golang.com.cn,direct

7. 权限问题

  • 不要使用 sudo go build
  • 若需系统目录,先 build 再 sudo cp

四、系统特性注意

8. Ubuntu 版本差异

  • Ubuntu 22.04+:glibc 较新
  • 老系统(18.04)编译的程序在新系统可运行,反之可能不行

9. 使用 systemd 部署

示例:

[Unit]
Description=Go App

[Service]
ExecStart=/opt/app/app
WorkingDirectory=/opt/app
Restart=always

[Install]
WantedBy=multi-user.target

五、调试与排错

10. 常见问题

  • command not found: go → PATH 未配置
  • cannot find package → go mod 未初始化
  • permission denied → 文件无执行权限
chmod +x app

如果你能说明:

  • 是 本地编译还是 CI
  • 是否 交叉编译
  • 是否 容器 / 服务器部署

我可以给你更针对性的建议。

0 踩