在 Ubuntu 上编译 Golang 程序的标准流程
一 安装与准备
- 更新索引并安装 Go(两种常用方式,二选一):
- 使用发行版仓库安装:sudo apt update && sudo apt install -y golang
- 使用官方二进制包安装(示例为 go1.22.0,可按需替换版本):
wget https://golang.google.cn/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
- 配置环境变量(写入 ~/.bashrc 或 /etc/profile 并 source 使其生效):
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
- 验证安装:go version(应输出版本与平台,如:go1.22.0 linux/amd64)
二 项目初始化与代码
- 进入项目目录(Go 模块方式,推荐):
cd /path/to/your/project
go mod init your-module-name
- 示例 main.go:
package main
import “fmt”
func main() {
fmt.Println(“Hello, Ubuntu”)
}
- 说明:使用 Go 模块(go.mod)管理依赖,无需再手动维护 GOPATH 工作区布局
三 本地编译与运行
- 编译为当前平台可执行文件:
go build -o app main.go
或直接 go build(二进制名默认与目录名或包名一致)
- 运行:
./app
- 常用构建选项:
- -o :指定输出文件名
- -v:显示构建过程包信息
- -ldflags “-s -w”:去除符号表与调试信息,减小体积(发布常用)
四 交叉编译与多架构产物
- 交叉编译为 Linux 目标(在 Ubuntu 上也可生成其他平台的可执行文件):
- Linux amd64:GOOS=linux GOARCH=amd64 go build -o app-linux-amd64 main.go
- Linux arm64:GOOS=linux GOARCH=arm64 go build -o app-linux-arm64 main.go
- Windows amd64:GOOS=windows GOARCH=amd64 go build -o app.exe main.go
- macOS amd64:GOOS=darwin GOARCH=amd64 go build -o app-darwin-amd64 main.go
- 提示:交叉编译时无需在目标平台运行构建,但请确保代码未依赖特定平台的 C 库或系统调用
五 部署与常见问题
- 部署到目标服务器:
scp app user@server:/opt/app/
ssh user@server “chmod +x /opt/app/app && /opt/app/app”
- 常见问题与处理:
- 权限问题:确保目标目录可写,必要时使用 chmod +x 赋予可执行权限
- 交叉编译后无法运行:核对 GOOS/GOARCH 是否匹配目标平台与架构
- 动态库依赖报错:Go 默认静态链接,若使用了 CGO 或依赖 C 库,需安装相应运行库,或改为纯 Go 实现/静态编译配置