Ubuntu 安装 Golang 详细指南 – wiki基地


Ubuntu 安装 Golang 完全指南:从入门到精通

引言

Go(又称 Golang)是由 Google 开发的一种开源、静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。自 2009 年发布以来,Go 语言凭借其简洁的语法、出色的并发处理能力、高效的编译速度和强大的标准库,在云计算、微服务、网络编程、分布式系统等领域获得了广泛应用。对于开发者而言,搭建一个稳定、高效的 Go 开发环境是迈向 Go 编程世界的第一步。

Ubuntu 作为最受欢迎的 Linux 发行版之一,是众多开发者首选的操作系统平台。本文旨在提供一份在 Ubuntu 系统上安装和配置 Go 语言开发环境的终极指南,内容涵盖多种安装方法、详细的环境变量配置、安装验证、基础项目创建与运行、版本管理以及常见问题排查,力求全面、细致,无论您是 Go 新手还是有一定经验的开发者,都能从中获益。

准备工作:系统要求与更新

在开始安装 Go 之前,请确保您的 Ubuntu 系统满足以下基本要求:

  1. Ubuntu 系统: 拥有一台运行 Ubuntu 的计算机或虚拟机。推荐使用长期支持(LTS)版本,如 Ubuntu 20.04 LTS, 22.04 LTS 或更新版本,以获得更好的稳定性和支持周期。您可以通过命令 lsb_release -a 查看您的 Ubuntu 版本。
  2. 用户权限: 您需要拥有 sudo 权限(或 root 权限)来执行系统级别的安装和配置命令。
  3. 网络连接: 安装过程需要从网络下载 Go 安装包或通过包管理器获取,请确保您的系统网络连接正常。
  4. 终端访问: 熟悉基本的 Linux 命令行操作,因为大部分安装和配置步骤将在终端(Terminal)中完成。

强烈建议 在进行任何软件安装之前,先更新您的系统软件包列表和已安装的软件包:

bash
sudo apt update
sudo apt upgrade -y

这可以确保您的系统处于最新状态,减少潜在的依赖性问题。

安装 Go 的多种方法

在 Ubuntu 上安装 Go 主要有以下几种常用方法,各有优劣:

  1. 使用 APT 包管理器安装 (apt install golang-go): 最简单快捷,但可能不是最新版本。
  2. 下载官方二进制发行版 (Tarball): 官方推荐,可以安装任意指定版本,尤其是最新稳定版,控制力最强。
  3. 使用 Snap 包管理器安装 (snap install go): 安装简单,自动更新,但可能存在沙箱限制。
  4. 使用版本管理工具 (如 GVM, goenv): 方便在多个 Go 版本之间切换,适合需要同时维护不同版本项目的开发者(本文将简要提及,不作主要安装方式详述)。

接下来,我们将详细介绍前三种主流安装方法。

方法一:使用 APT 包管理器安装

这是在 Ubuntu 上安装软件最常见也最便捷的方式。Ubuntu 的官方软件仓库通常会包含 Go 的安装包,但版本可能略微落后于 Go 官方发布的最新稳定版。

步骤:

  1. 更新软件包列表: (如果前面没做,请执行)
    bash
    sudo apt update
  2. 安装 Go: 执行以下命令安装 golang-go 包。
    bash
    sudo apt install golang-go -y

    -y 参数会自动确认安装过程中的提示。

  3. 验证安装: 安装完成后,可以通过以下命令查看 Go 的版本,确认安装是否成功。
    bash
    go version

    如果成功,您将看到类似以下的输出(版本号可能不同):
    go version go1.18.1 linux/amd64
    (注意:APT 安装的版本可能不是最新的,比如在 Ubuntu 22.04 上,默认安装的可能是 Go 1.18.x)。

优点:

  • 简单: 只需一条命令即可完成安装。
  • 集成: 与系统包管理紧密集成,卸载和更新(通过 apt upgrade)相对方便。

缺点:

  • 版本滞后: APT 仓库中的 Go 版本通常不是最新的。如果需要使用 Go 的最新特性或修复,此方法可能不适用。
  • 灵活性低: 难以安装特定旧版本或测试版。

配置:

使用 APT 安装时,Go 通常会被安装在系统路径下(如 /usr/lib/go-<version>),相关的可执行文件(如 go)会被链接到 /usr/bin/ 目录下,因此通常无需手动配置 PATH 环境变量。GOROOT(Go 安装目录)和默认的 GOPATH(工作区路径,默认为 $HOME/go)通常也会被自动设置或能被 Go 工具链自动检测到。可以通过 go env 命令查看这些环境变量的默认值。

卸载:

如果需要卸载通过 APT 安装的 Go,可以使用以下命令:
bash
sudo apt remove golang-go
sudo apt autoremove -y # 清理不再需要的依赖

方法二:下载官方二进制发行版 (推荐)

这是安装 Go 的官方推荐方法,因为它允许您安装 Go 官方发布的任何版本(包括最新稳定版),并且对安装位置有完全的控制权。

步骤:

  1. 访问 Go 官方下载页面: 打开浏览器,访问 Go 官方网站的下载页面:https://golang.org/dl/https://go.dev/dl/

  2. 选择并下载 Go 二进制包: 在页面上找到适用于 Linux 的最新稳定版(通常文件名类似 go<version>.linux-amd64.tar.gz,其中 <version> 是版本号,amd64 指的是 64 位 x86 架构,请根据您的系统架构选择)。您可以通过右键复制链接地址,然后在终端使用 wgetcurl 下载。

    例如,假设要下载 Go 1.21.5 版本:
    “`bash

    确保在你的家目录或者一个临时下载目录执行

    cd ~/Downloads

    使用 wget 下载 (如果 wget 未安装,sudo apt install wget)

    wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz

    或者使用 curl 下载 (如果 curl 未安装,sudo apt install curl)

    curl -LO https://go.dev/dl/go1.21.5.linux-amd64.tar.gz

    “`

  3. (可选但推荐) 验证下载文件的完整性和安全性: 官方下载页面会提供每个文件的 SHA256 校验和。下载完成后,计算本地文件的校验和并与官网提供的值进行比对,确保文件未被篡改且下载完整。
    bash
    # 计算下载文件的 SHA256 校验和
    sha256sum go1.21.5.linux-amd64.tar.gz

    将输出的哈希值与官网页面上对应的哈希值比较,两者必须完全一致。

  4. 移除旧的 Go 安装 (如果存在): 如果您之前通过其他方式(尤其是手动方式)安装过 Go 到 /usr/local/go,建议先将其移除,避免冲突。
    bash
    # 谨慎操作!确认 /usr/local/go 确实是旧的 Go 安装目录
    sudo rm -rf /usr/local/go

    如果您是通过 APT 或 Snap 安装的,建议先用对应方式卸载。

  5. 解压 Go 压缩包到指定位置: Go 官方推荐将 Go 安装在 /usr/local 目录下。这需要 sudo 权限。
    bash
    # 将下载的 tar.gz 文件解压到 /usr/local 目录下
    # 这会在 /usr/local 下创建一个名为 'go' 的目录
    sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz

    • -C /usr/local: 指定解压的目标目录。
    • -x: 提取文件。
    • -z: 处理 gzip 压缩。
    • -f: 指定要处理的文件名。

    执行完毕后,Go 的所有文件将位于 /usr/local/go 目录下。

  6. 配置环境变量 (关键步骤): 为了让系统能够找到 Go 的可执行文件(如 go, gofmt 等)并正确管理 Go 项目,需要配置几个重要的环境变量:PATH, GOROOT, 和 GOPATH

    • GOROOT: 指向 Go 的安装目录。虽然较新版本的 Go 可以自动检测 GOROOT,但显式设置仍是一种好的实践。
      export GOROOT=/usr/local/go
    • GOPATH: Go 的工作区路径。在 Go 1.11 引入 Go Modules 之前,GOPATH 非常核心,所有非标准库的源码、编译后的包文件和可执行文件都存放在 GOPATH 下的 src, pkg, bin 目录。现在,随着 Go Modules 的普及,GOPATH 的主要作用是存放通过 go install 命令安装的 Go 工具的二进制文件 (这些文件会放在 $GOPATH/bin 目录下)。推荐将其设置为用户家目录下的 go 文件夹。
      export GOPATH=$HOME/go
    • PATH: 需要将 Go 的可执行文件目录 ($GOROOT/bin) 和 Go 工作区的可执行文件目录 ($GOPATH/bin) 添加到系统的 PATH 环境变量中,这样你才能在任何目录下直接运行 go 命令以及通过 go install 安装的工具。
      export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

    如何永久设置环境变量?

    将上述 export 命令添加到您的 shell 配置文件中。对于大多数 Ubuntu 用户(使用 Bash shell),推荐修改 ~/.profile 文件(针对登录 shell)或 ~/.bashrc 文件(针对交互式非登录 shell)。通常,将路径相关的设置放在 ~/.profile 更为合适。

    使用文本编辑器(如 nano, vim, gedit)打开文件:
    bash
    nano ~/.profile

    在文件末尾添加以下内容:
    “`bash

    Go lang environment variables

    export GOROOT=/usr/local/go
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    ``
    保存并关闭文件 (在
    nano中是Ctrl+X, 然后按Y, 再按Enter`)。

    使环境变量立即生效:

    • 方法一 (推荐): 注销当前用户,然后重新登录。
    • 方法二 (临时生效于当前终端): 在当前终端执行以下命令加载配置。注意这只对当前终端窗口有效,新开的窗口需要重新登录或手动 source
      bash
      source ~/.profile
  7. 验证安装和环境配置:

    • 检查 Go 版本:
      bash
      go version

      应显示您刚刚安装的版本,例如 go version go1.21.5 linux/amd64
    • 检查 Go 环境:
      bash
      go env

      这个命令会列出所有 Go 相关的环境变量及其当前值。请重点检查 GOROOT, GOPATH, 和 GOPATH/bin 是否已正确添加到 PATH 中(虽然 go env 不直接显示完整的 PATH,但它会显示 GOPATHGOROOT 的值,你可以通过 echo $PATH 来确认)。确保 GOROOT 指向 /usr/local/goGOPATH 指向 $HOME/go

优点:

  • 版本控制: 可以安装任意官方发布的 Go 版本,包括最新的稳定版、测试版或历史版本。
  • 官方推荐: 这是 Go 团队推荐的标准安装方式。
  • 干净独立: 安装过程不依赖系统包管理器,与其他系统软件隔离。

缺点:

  • 手动配置: 需要手动下载、解压和配置环境变量,步骤相对繁琐。
  • 手动更新: 更新 Go 版本需要重复下载、解压和可能的环境变量调整过程(如果 GOROOT 路径不变则无需修改环境变量)。

卸载:

卸载手动安装的 Go 非常直接:
1. 删除 Go 安装目录:sudo rm -rf /usr/local/go
2. 删除或注释掉您在 ~/.profile (或 .bashrc) 文件中添加的环境变量设置。
3. (可选)删除 Go 工作区目录:rm -rf ~/go (请谨慎!这会删除您下载的第三方包源码和 go install 安装的工具)。

方法三:使用 Snap 包管理器安装

Snap 是 Canonical 开发的一种通用 Linux 包格式,旨在提供更简单的软件安装、更新和管理体验,并且应用程序在沙箱环境中运行。

步骤:

  1. 确保 Snapd 已安装: 大多数现代 Ubuntu 版本默认已安装 snapd。如果未安装,可以执行:
    bash
    sudo apt update
    sudo apt install snapd
  2. 安装 Go Snap 包: 使用 snap install 命令安装 Go。需要使用 --classic 标志,因为 Go 需要访问系统范围的资源(如网络、文件系统),这超出了 Snap 默认的严格限制。
    bash
    sudo snap install go --classic

    Snap 会自动下载并安装最新稳定版的 Go。

  3. 验证安装:
    bash
    go version

    或者有时候 Snap 安装的路径可能不在默认 PATH 中,可以尝试:
    bash
    /snap/bin/go version

    通常 Snap 会自动配置好路径,如果 go version 直接可用,说明配置成功。

优点:

  • 安装简单: 一条命令完成安装。
  • 自动更新: Snap 包通常会自动在后台更新到最新版本,无需手动干预。
  • 多版本共存 (Channel): Snap 支持通过 “channel” 安装不同版本的 Go(如 beta, edge 或特定版本轨道),方便测试。例如 sudo snap install go --classic --channel=1.18/stable

缺点:

  • 沙箱限制: --classic 模式虽然放宽了限制,但 Snap 应用有时仍可能遇到与传统安装方式不同的行为,尤其是在文件系统访问或与系统其他部分交互时。
  • 性能: Snap 应用的启动速度有时可能比本地安装的应用稍慢。
  • 磁盘空间: Snap 会维护旧版本以支持回滚,可能占用更多磁盘空间。
  • 环境配置: Snap 可能会以自己的方式管理路径,虽然通常能工作,但可能与习惯的手动配置方式略有不同。GOPATH 等设置仍建议按需在 ~/.profile 中配置。

卸载:

卸载通过 Snap 安装的 Go:
bash
sudo snap remove go

Post-Installation: 配置与验证

无论您选择哪种安装方式,安装完成后进行细致的配置和验证是确保开发环境正常工作的关键。

深入验证环境

除了 go versiongo env 命令提供了更全面的环境信息。仔细检查以下几个关键变量:

  • GOVERSION: 应显示您安装的 Go 版本。
  • GOROOT: Go 安装目录。对于手动安装,应为 /usr/local/go。对于 APT 或 Snap 安装,可能是其他系统路径。
  • GOPATH: Go 工作区路径。即使使用 Go Modules,GOPATH 仍然重要,因为 go install 命令默认会将编译好的二进制文件放在 $GOPATH/bin。确保它指向您期望的位置(推荐 $HOME/go)。
  • GOPROXY: Go 模块代理。默认通常是 https://proxy.golang.org,direct。在中国大陆地区,可能需要配置国内镜像以加速模块下载,例如:
    bash
    go env -w GOPROXY=https://goproxy.cn,direct

    使用 go env -w 会将设置持久化到 Go 环境配置文件中 (~/.config/go/env 或系统特定位置)。
  • GO111MODULE: 控制 Go Modules 的启用状态。从 Go 1.16 开始,其默认值为 on,推荐保持开启。

创建 Go 工作区目录 (GOPATH)

即使现代 Go 开发主要依赖 Go Modules,创建 GOPATH 指定的目录结构仍然有益,特别是为了存放 go install 的工具。

“`bash

创建 GOPATH 指向的目录(如果 ~/.profile 中设置的是 $HOME/go)

mkdir -p $HOME/go

创建 bin 目录,用于存放 go install 安装的二进制文件

mkdir -p $HOME/go/bin

(可选) 创建 pkg 和 src 目录,虽然在 Modules 时代不强制在此开发

mkdir -p $HOME/go/pkg
mkdir -p $HOME/go/src
``
**重要:** 确保
$HOME/go/bin(即$GOPATH/bin) 已经添加到了你的PATH环境变量中(在方法二的步骤 6 中已说明如何操作)。这样,当你使用go install some/tool/path@latest` 安装 Go 工具时,可以直接在终端运行该工具。

理解 Go Modules (现代 Go 开发的核心)

自 Go 1.11 起引入的 Go Modules 是官方推荐的依赖管理系统,它彻底改变了 Go 项目的组织方式和依赖处理。

  • 核心概念: 项目不再强制放在 $GOPATH/src 下。每个项目都是一个模块,在其根目录下有一个 go.mod 文件,用于定义模块路径、Go 版本要求以及依赖项及其版本。go.sum 文件则记录了依赖项的校验和,保证依赖不被篡改。
  • 工作流程:
    1. 在你的项目目录下(可以在任何地方,例如 ~/projects/my-go-app),使用 go mod init <module-path> 初始化模块。<module-path> 通常是类似版本控制仓库的路径,如 github.com/yourusername/my-go-app
    2. 编写代码,import 你需要的包。
    3. 运行 go build, go test, go run 等命令时,Go 会自动查找 go.mod 文件,下载缺失的依赖项(并记录到 go.modgo.sum),然后执行操作。
    4. 依赖项会被下载到 $GOPATH/pkg/mod 目录下缓存,供所有项目共享。

编写并运行你的第一个 Go 程序 (“Hello, World!”)

让我们创建一个简单的 Go 程序来验证整个环境是否工作正常。

  1. 创建项目目录:
    bash
    # 在你的家目录下创建一个项目文件夹
    mkdir ~/hello-go
    cd ~/hello-go

  2. 初始化 Go Module:
    bash
    # 使用一个示例模块路径初始化
    go mod init example.com/hello-go

    这会在当前目录下创建一个 go.mod 文件。

  3. 创建 Go 源文件: 创建一个名为 main.go 的文件。
    bash
    nano main.go

    在编辑器中输入以下代码:
    “`go
    package main

    import “fmt”

    func main() {
    fmt.Println(“Hello, Go on Ubuntu! Installation successful!”)
    }
    “`
    保存并关闭文件。

  4. 运行程序:

    • 直接运行: 使用 go run 命令编译并立即执行。
      bash
      go run main.go

      如果一切正常,您将在终端看到输出:
      Hello, Go on Ubuntu! Installation successful!
    • 编译成可执行文件: 使用 go build 命令。
      bash
      go build

      这会在当前目录下生成一个与模块名(或目录名,如果模块名未指定)同名的可执行文件(在本例中可能是 hello-go)。
      然后运行这个可执行文件:
      bash
      ./hello-go

      同样会输出问候语。

如果以上步骤都能成功执行,恭喜您,您的 Go 开发环境已在 Ubuntu 上成功搭建并配置完成!

管理 Go 版本

随着 Go 语言的不断发展,您可能需要:

  • 升级到新版本: 获取新特性、性能改进和安全修复。
  • 使用特定旧版本: 维护需要旧版 Go 的老项目。
  • 测试开发版: 尝鲜 Go 的未来功能。

对于手动安装 (方法二):

  • 升级/切换: 只需下载新版本的 tar.gz 包,移除旧的 /usr/local/go 目录(sudo rm -rf /usr/local/go),然后将新版本解压到 /usr/local。由于 GOROOT 路径 (/usr/local/go) 不变,通常无需修改环境变量。
  • 安装到不同位置: 如果想同时保留多个版本,可以将新版本解压到不同目录(如 /usr/local/go1.21.5),然后修改 ~/.profile 中的 GOROOT 指向新路径,并 source ~/.profile 使其生效。但这不够灵活。

更好的方式:使用 Go 版本管理工具

对于需要频繁切换 Go 版本的开发者,强烈推荐使用 Go 版本管理工具,如:

  • GVM (Go Version Manager): 一个功能丰富的命令行工具,可以安装、管理和切换多个 Go 版本。安装和使用 GVM 有其自己的一套流程,通常涉及克隆仓库和执行安装脚本。
  • goenv: 类似于 Python 的 pyenv 或 Node.js 的 nvm,允许按项目或全局设置 Go 版本。

这些工具简化了多版本管理的复杂性。例如,使用 GVM,您可以:
“`bash

安装 GVM (参考其官方文档)

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
source ~/.gvm/scripts/gvm

安装指定 Go 版本

gvm install go1.18.10
gvm install go1.21.5

列出已安装版本

gvm list

切换到指定版本 (当前 shell 生效)

gvm use go1.21.5

设置默认版本

gvm use go1.21.5 –default
“`
使用版本管理工具可以极大地提高处理多版本需求的效率。

常见问题与故障排查 (Troubleshooting)

  • bash: go: command not found:
    • 原因: PATH 环境变量没有正确设置,或者设置后没有生效。
    • 解决:
      1. 确认 Go 是否已安装 (ls /usr/local/go/bin/go 或对应安装路径)。
      2. 检查 ~/.profile (或 .bashrc) 中 export PATH=$PATH:$GOROOT/bin:$GOPATH/bin 是否正确无误。$GOROOT$GOPATH 是否已正确定义在其上方?
      3. 确认您已经 source ~/.profile 或重新登录以使更改生效。
      4. 执行 echo $PATH 查看当前的 PATH 值,确认 Go 的 bin 目录(如 /usr/local/go/bin)和 GOPATH 的 bin 目录(如 /home/youruser/go/bin)是否包含在内。
  • 权限问题 (Permission denied):
    • 原因: 在执行需要 sudo 的命令(如解压到 /usr/local,使用 apt install)时未使用 sudo,或者文件/目录权限不正确。
    • 解决: 确保在需要提升权限的命令前加上 sudo。如果问题发生在访问 Go 安装目录或工作区,检查相关目录的权限 (ls -ld /usr/local/go, ls -ld ~/go)。
  • 下载 Go 包或模块时网络超时/失败:
    • 原因: 网络连接问题,或者在中国大陆地区访问 Go 官方代理 (proxy.golang.org) 速度慢或被阻断。
    • 解决:
      1. 检查您的网络连接。
      2. 配置国内 Go 模块代理,如上文提到的 go env -w GOPROXY=https://goproxy.cn,direct
  • Checksum 校验失败:
    • 原因: 下载的 tar.gz 文件不完整或在传输过程中损坏。
    • 解决: 删除已下载的文件,重新下载,并再次进行 SHA256 校验。

结论

在 Ubuntu 系统上安装和配置 Go 语言开发环境有多种途径。对于追求简单且不介意版本稍旧的用户,使用 apt 包管理器是最快的方式。对于需要最新版本、完全控制安装过程或进行多版本管理的开发者,强烈推荐使用官方二进制发行版 (tarball) 进行手动安装,并仔细配置好环境变量。Snap 提供了一种介于两者之间的选择,易于安装和更新,但可能带来一些沙箱相关的潜在问题。

无论选择哪种方法,关键在于正确配置环境变量(尤其是 PATH, GOROOT, GOPATH),理解并拥抱 Go Modules 进行现代 Go 开发,并通过创建和运行一个简单的 “Hello, World” 程序来验证整个环境。掌握这些基础,您就可以在 Ubuntu 这个强大的平台上,顺利开启您的 Go 编程之旅了。

希望这份详尽的指南能帮助您成功在 Ubuntu 上搭建起稳定高效的 Go 开发环境。祝您编码愉快!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部