Ubuntu 上怎么用 Go 编译器:安装、编译与排错一次讲清

叶初
叶初
发布时间:2026-08-22| 6人浏览过
原创

前言

很多人第一次在 Ubuntu 上使用 Go,真正卡住的往往不是写代码,而是安装路径、环境变量、编译输出和交叉编译这些基础环节。下面按“先装好、再跑通、再编译、最后优化和排错”的顺序整理一遍,读完后你可以判断自己该选官方二进制包还是 APT 安装,也能直接把程序编译到目标平台。

很多人第一次在 Ubuntu 上使用 Go,真正卡住的往往不是写代码,而是安装路径、环境变量、编译输出和交叉编译这些基础环节。下面按“先装好、再跑通、再编译、最后优化和排错”的顺序整理一遍,读完后你可以判断自己该选官方二进制包还是 APT 安装,也能直接把程序编译到目标平台。

在 Ubuntu 上安装 Go 编译器

方式一:使用官方二进制包

如果你更看重版本可控和更新及时,优先用官方二进制包。原文示例使用的是 Go 1.20.5,安装步骤如下。

官方安装与 APT 安装的对比信息图,展示 Ubuntu 上两种 Go 安装方式的步骤和差异
Ubuntu 安装 Go 的两种方式把官方二进制包和 APT 安装放在一张图里,便于快速判断该选哪种方式。

先更新系统包列表:

sudo apt update

下载 Go 安装包:

wget https://golang.org/dl/go1.20.5.linux-amd64.tar.gz

解压到 /usr/local:

sudo tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz

然后编辑 ~/.bashrc 或 ~/.zshrc,加入以下环境变量:

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

让配置立即生效:

source ~/.bashrc

最后执行 go version 检查结果。如果输出类似下面这样,说明安装已经成功:

go version go1.20.5 linux/amd64

方式二:使用 Ubuntu APT 仓库

如果你只是想快速装好、先跑起来,也可以直接使用 Ubuntu 自带仓库:

sudo apt install golang-go

这种方式的优点是简单,但仓库版本通常会比官方发布慢一些。安装后同样建议执行 go version 核对当前版本。

先写一个最小可运行的 Go 程序

安装完成后,先不要急着谈编译参数,最好先用一个最小示例确认开发环境确实可用。

按 Go 工作空间结构创建目录:

mkdir -p ~/go/src/hello

进入目录后,新建 main.go,写入以下内容:

package main
import "fmt"
func main() {
    fmt.Println("Hello, Ubuntu & Golang!")
}

不经过正式编译,直接运行:

go run main.go

如果终端输出:

Hello, Ubuntu & Golang!

说明 Go 工具链、环境变量和当前目录结构都已经跑通。

如何在 Ubuntu 上编译 Go 程序

本地编译:生成当前系统可执行文件

在 main.go 所在目录执行 go build,就会生成当前平台可执行文件:

Go 程序从 go run 到本地编译、交叉编译与优化参数的关系图
Go 程序的运行与编译路径这一张图把运行、构建、交叉编译和体积优化串起来,适合放在编译章节后帮助读者建立整体认识。
go build

默认输出文件名通常与目录或包名相关;原文示例中说明会生成名为 main 的可执行文件,Windows 下则会带上 .exe 后缀。

如果你想自己指定文件名,可以这样写:

go build -o hello

编译完成后直接执行:

./hello

输出应与 go run main.go 一致。

交叉编译:为目标平台提前生成可执行文件

Go 的一个明显优势,是可以直接为其他平台输出可执行文件。比如要生成适用于 Linux 64 位系统的程序,可以先设置目标平台,再执行构建:

export GOOS=linux
export GOARCH=amd64
go build -o hello-linux

生成的 hello-linux 可以直接放到对应 Linux 服务器运行,不需要在目标机器上再安装 Go 环境。

编译慢或文件大时,可以这样优化

利用编译缓存减少重复构建

Go 默认已经开启编译缓存,用来保存已编译的包,避免重复工作。原文提到也可以通过 -buildcache=true 显式启用,默认值就是开启状态。

用并行编译提升构建速度

如果机器核心数够用,可以通过 -p 指定并行编译数量。例如使用 4 个核心:

go build -p 4

这在项目依赖较多时更容易看到效果。

压缩二进制体积

如果更关心部署包大小,可以在构建时去掉调试信息和符号表:

go build -ldflags="-s -w" -o hello-small

按原文经验,这样通常可以减少 30%~50% 的体积,适合发布到服务器或分发场景。

依赖变化后强制全量重编译

当你怀疑缓存未更新,或者依赖刚刚发生变化,可以使用 -a 忽略缓存、重新编译所有包:

go build -a

常见问题与处理办法

出现 Permission denied 怎么办

如果编译后执行程序时提示 “Permission denied”,先给输出文件补可执行权限:

Go 编译常见问题处理图,覆盖权限、代理和 CGO 交叉编译失败的排查重点
Go 编译排错速查把最常见的三个问题做成排查卡片,读者可以按现象直接定位处理办法。
chmod +x hello

原文也提到可以直接用 sudo,但只建议在确有必要时再用。

依赖下载慢时如何设置代理

如果拉取模块很慢,可以配置 Go 模块代理:

go env -w GOPROXY=https://goproxy.cn,direct

这样通常能明显改善依赖下载速度。

交叉编译失败时先检查 CGO

交叉编译遇到错误时,一个常见原因是 CGO 依赖本地 C 库,导致跨平台时不兼容。可以先关闭 CGO 再试:

CGO_ENABLED=0 GOOS=linux go build

如果你的程序本身不依赖 C 扩展,这通常是最直接的处理办法。

怎么选安装和编译方式

如果你想要更新的版本和更稳定的管理方式,优先使用官方二进制包;如果只是临时体验或快速部署开发环境,APT 安装更省事。日常开发可以先用 go run 验证逻辑,再用 go build 输出可执行文件;需要发到服务器时,再结合 GOOS、GOARCH 和 CGO_ENABLED=0 处理交叉编译即可。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。