0

0

Golang Linux系统下源码编译安装步骤

P粉602998670

P粉602998670

发布时间:2025-09-04 12:25:01

|

491人浏览过

|

来源于php中文网

原创

答案是:从源码编译安装Golang需先获取源码并配置构建环境,再通过引导Go版本编译生成二进制文件,最后设置GOROOT、GOPATH和PATH环境变量以完成配置。

golang linux系统下源码编译安装步骤

在Linux系统下从源码编译安装Golang,核心步骤无非是获取Go的源代码,然后通过系统自带的编译工具链将其构建成可执行文件,并最终配置好相应的环境变量。这通常是为了获取最新的Go版本、进行特定环境的定制,或者仅仅是想深入了解Go的构建过程。

解决方案

要从源码编译安装Golang,你需要确保系统具备一些基本的构建工具,比如

gcc
git
。如果你之前没有安装过Go,或者想编译一个比当前系统Go版本更新的版本,你可能还需要一个旧版本的Go作为引导(bootstrap)。

  1. 准备构建环境 确保你的Linux发行版安装了C编译器(通常是

    gcc
    )和
    git
    。 例如,在Debian/Ubuntu系:

    sudo apt update
    sudo apt install build-essential git

    在CentOS/RHEL系:

    立即学习go语言免费学习笔记(深入)”;

    sudo yum groupinstall "Development Tools"
    sudo yum install git
  2. 获取Go源代码 Go的源代码托管在GitHub上。你可以选择克隆官方仓库:

    git clone https://go.googlesource.com/go $HOME/go-src

    这里我习惯性地把它放到

    $HOME/go-src
    ,你可以选择任何你觉得合适的地方。如果你想编译特定版本,克隆后记得切换到对应的tag:

    cd $HOME/go-src
    git checkout go1.22.0 # 替换为你想要的版本
  3. 设置引导Go版本 (GOROOT_BOOTSTRAP) 这一步非常关键,也常常是新手容易忽略的地方。Go是用Go语言自身编写的,所以编译Go需要一个已经存在的Go编译器。

    • 如果你是首次安装Go,或者想编译的Go版本与当前系统Go版本差异较大,你需要下载一个预编译的二进制版本作为引导。可以从Go官方下载页面下载一个与你目标版本相近的稳定版本,解压到某个目录,比如
      $HOME/go-bootstrap
    • 然后设置环境变量
      GOROOT_BOOTSTRAP
      指向这个引导Go的安装路径。
      export GOROOT_BOOTSTRAP=$HOME/go-bootstrap/go
    • 如果你的系统已经有一个足够新(通常是比你目标版本早两三个小版本以内)的Go环境,并且它的
      GOROOT
      已经设置在
      PATH
      中,那么这一步可以省略,构建脚本会尝试使用它。但为了稳妥起见,明确指定通常更好。
  4. 开始编译 进入源代码的

    src
    目录,并执行
    all.bash
    脚本。这个脚本会完成所有的编译工作。

    cd $HOME/go-src/src
    ./all.bash

    这个过程可能会持续几分钟到十几分钟,具体取决于你的机器性能。如果一切顺利,你会看到

    ALL TESTS PASSED
    的字样。

  5. 配置环境变量 编译完成后,Go的二进制文件会生成在

    $HOME/go-src/bin
    目录下。你需要将这个路径添加到系统的
    PATH
    环境变量中,并设置
    GOROOT
    GOPATH
    。 编辑你的shell配置文件,比如
    ~/.bashrc
    ~/.zshrc
    ~/.profile

    # Go 语言的安装路径
    export GOROOT=$HOME/go-src
    # Go 语言的工作空间,用于存放你的项目代码和第三方库
    export GOPATH=$HOME/go
    # 将 Go 的 bin 目录添加到 PATH
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

    保存文件后,执行

    source ~/.bashrc
    (或其他对应文件)使环境变量生效。

  6. 验证安装 打开一个新的终端,运行

    go version
    go env
    来验证Go是否正确安装和配置。

    go version
    go env

    如果显示了你编译的Go版本信息,并且

    go env
    中的
    GOROOT
    GOPATH
    指向你设置的路径,那么恭喜你,安装成功了。

为什么选择源码编译安装Golang,而不是使用包管理器?

选择从源码编译安装Go,而不是简单地通过

apt
yum
brew
等包管理器,这背后通常有几个驱动因素,它并非总是最优解,但特定场景下却显得不可或缺。

首先,版本控制的极致需求。包管理器提供的Go版本往往不是最新的,或者说,它们在更新速度上总是滞后于Go官方发布。对于那些希望第一时间体验Go最新特性、测试某个即将发布的版本,或者需要针对特定Go版本进行开发和调试的开发者来说,源码编译是获取“第一手”Go版本的唯一途径。有时,你甚至可能需要编译Go的开发分支(

master
分支),以便参与Go语言本身的开发,或者测试某个还未合入主线的实验性功能。

其次,定制化和透明度。源码编译给了你完全的控制权。你可以检查、修改甚至调试Go语言自身的代码。这对于那些需要深入理解Go运行时、垃圾回收机制,或者想为Go贡献代码的开发者来说,是极其宝贵的。虽然普通开发者很少会去修改Go语言本身,但了解其构建过程,对理解整个生态系统都有帮助。比如,你可能想在某个嵌入式系统上编译Go,而那个系统没有现成的Go包,那么源码编译就是唯一的路。

当然,我们也要承认,源码编译带来的复杂性也更高。它需要你手动处理依赖、设置环境变量,并且在更新时也需要重复这些步骤。而包管理器则省去了这些麻烦,自动化程度高,对于日常开发来说,通常是更便捷的选择。所以,在选择编译方式时,我总是会权衡:我是否真的需要最新版本?我是否需要对Go本身进行定制或深入研究?如果答案是肯定的,那么源码编译就是值得投入的。

源码编译过程中常见的错误及如何排查?

源码编译Go虽然提供极致的控制,但也意味着你可能会遇到一些比包管理器安装更“原始”的问题。这些错误往往指向环境配置或依赖缺失。

  1. "go: cannot find GOROOT directory" 或 "go: cannot find GOROOT_BOOTSTRAP"

    • 原因分析:这是最常见的错误之一。它通常意味着你的系统找不到一个可用的Go编译器来启动构建过程。
      GOROOT_BOOTSTRAP
      没有正确设置,或者指向的路径不包含一个有效的Go安装。
    • 排查方法
      • 检查
        GOROOT_BOOTSTRAP
        环境变量是否已设置,并且其值是否指向一个完整且可用的Go安装目录(例如
        $HOME/go-bootstrap/go
        ,而不是
        $HOME/go-bootstrap/go/bin
        )。
      • 确保你下载的引导Go版本与你的系统架构兼容,并且其二进制文件(如
        go
        命令)存在于
        $GOROOT_BOOTSTRAP/bin
        下。
      • 如果你的系统已经有Go,可以尝试先
        unset GOROOT_BOOTSTRAP
        ,让
        all.bash
        脚本尝试使用系统默认的Go。
  2. "gcc: command not found" 或 "make: command not found"

    Mokker AI
    Mokker AI

    AI产品图添加背景

    下载
    • 原因分析:你的系统缺少基本的C/C++编译器或构建工具。Go的运行时和一些标准库是用C编写的,需要这些工具来编译。
    • 排查方法
      • 在Debian/Ubuntu上运行
        sudo apt install build-essential
      • 在CentOS/RHEL上运行
        sudo yum groupinstall "Development Tools"
      • 确认安装完成后,再次尝试编译。
  3. 网络连接问题导致依赖获取失败

    • 原因分析:在编译过程中,Go可能会尝试从网络下载一些模块或工具。如果你的网络不稳定或者有防火墙限制,这部分可能会失败。
    • 排查方法
      • 确保你的网络连接正常。
      • 如果是在公司内部网络,可能需要配置代理。Go支持
        HTTP_PROXY
        HTTPS_PROXY
        环境变量。
      • 检查是否有
        GOPROXY
        环境变量,有时错误的
        GOPROXY
        设置也会导致下载失败。可以尝试
        unset GOPROXY
  4. 权限问题

    • 原因分析:如果你尝试将Go编译或安装到系统目录(如
      /usr/local/go
      )而没有足够的权限,可能会遇到写入失败的错误。
    • 排查方法
      • 确保你正在编译的目录(例如
        $HOME/go-src
        )你有完全的读写权限。
      • 如果一定要安装到系统目录,使用
        sudo
        命令,但这通常不推荐直接在源码编译时使用,因为可能会导致一些文件权限混乱。更好的做法是编译到用户目录,然后将
        GOROOT/bin
        添加到全局
        PATH

遇到错误时,最重要的是仔细阅读终端输出的错误信息。Go的构建脚本通常会给出相当详细的提示。同时,查阅Go官方的安装文档也是一个好习惯,它会提供最新的编译指南和常见问题解答。

如何正确配置Golang环境变量以确保系统识别?

正确配置Go语言的环境变量是确保系统能够找到并执行Go命令、管理项目依赖以及构建应用程序的关键。这不仅仅是把Go的路径加到

PATH
里那么简单,
GOROOT
GOPATH
这两个核心变量扮演着不同的角色,理解它们对于高效使用Go至关重要。

  1. GOROOT
    :Go语言的安装根目录

    • 作用:它指向Go语言SDK本身的安装位置。Go编译器、标准库、工具链(如
      go build
      ,
      go run
      ,
      go test
      等)都位于这个目录下。系统需要知道
      GOROOT
      才能找到这些核心组件。
    • 配置:在源码编译后,
      GOROOT
      通常就是你克隆Go源代码的目录,也就是Go编译后的产物所在目录。
      export GOROOT=$HOME/go-src # 假设你将源码编译到此
  2. GOPATH
    :Go语言的工作空间

    • 作用:在Go Modules出现之前,
      GOPATH
      是Go项目组织代码、存放第三方库和编译生成二进制文件的默认工作空间。它通常包含三个子目录:
      • src
        :存放你的Go项目源代码和第三方库源代码。
      • pkg
        :存放编译后的包文件(
        .a
        文件)。
      • bin
        :存放通过
        go install
        命令编译生成的二进制可执行文件。
    • Go Modules时代的变化:自Go 1.11引入Go Modules后,
      GOPATH
      对于依赖管理的重要性大大降低。项目不再强制要求放在
      GOPATH/src
      下,依赖也通过
      go.mod
      文件在项目目录内管理。然而,
      GOPATH/bin
      仍然是一个非常重要的目录,许多Go工具(如
      gopls
      delve
      等)通过
      go install <tool_path>
      安装后,它们的二进制文件会默认存放在
      $GOPATH/bin
      中。因此,保持
      GOPATH
      的设置,并将其
      bin
      目录加入
      PATH
      ,仍然是最佳实践。
    • 配置:你可以将其设置为你希望的任何目录,通常是用户主目录下的一个子目录。
      export GOPATH=$HOME/go # 这是一个常见的设置,你也可以选择其他路径

      确保这个目录存在:

      mkdir -p $HOME/go

  3. PATH
    :系统可执行文件搜索路径

    • 作用:这是Linux系统用来查找可执行命令的目录列表。当你输入一个命令时,系统会按顺序在
      PATH
      中的每个目录里查找该命令。
    • 配置:你需要将
      $GOROOT/bin
      $GOPATH/bin
      都添加到
      PATH
      中,这样你才能直接在任何终端运行
      go
      命令,以及通过
      go install
      安装的各种Go工具。
      export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

      注意,

      $PATH
      在前,保证了系统原有的命令优先级。

将环境变量持久化

为了让这些环境变量在每次打开新终端时都自动生效,你需要将它们添加到你的shell配置文件中。最常见的配置文件是

~/.bashrc
(Bash shell)、
~/.zshrc
(Zsh shell)或
~/.profile

  • 编辑文件:使用你喜欢的文本编辑器打开这些文件,例如:
    nano ~/.bashrc
  • 添加内容:将上述三行
    export
    命令添加到文件末尾。
  • 保存并生效:保存文件后,在当前终端执行
    source ~/.bashrc
    (或对应文件)来立即加载新的环境变量。对于新打开的终端,这些变量会自动生效。

验证配置

在完成配置并使之生效后,务必打开一个新的终端窗口,然后运行以下命令进行验证:

go version
go env GOROOT
go env GOPATH
echo $PATH

确保

go version
显示的是你编译的Go版本,
go env GOROOT
go env GOPATH
显示的是你设置的路径,并且
echo $PATH
的输出中包含了
$GOROOT/bin
$GOPATH/bin
。如果一切正常,你的Go环境就配置成功了,可以开始愉快的Go开发之旅了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

210

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

247

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

356

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

214

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

409

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

490

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

201

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

1478

2025.06.17

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号