如何在Ubuntu 16.04从源码构建Go

介绍

Go是由谷歌开发的一个现代化的,开放源码的编程语言。它很简单,并有一个强大的库和工具集,这使得轻松构建可靠和高效的应用程序。 如果你想根据最新版本的语言测试你的Go应用程序,贡献Go代码库,或者有更好的Go版本管理,你需要从源代码构建Go。本教程将向您介绍如何构建Go,涵盖一些实际注意事项,并构建一个“Hello,World”测试应用程序。

前提条件

要遵循本教程,您需要:

第1步 - 安装构建依赖关系

开始之前,请确保您的存储库缓存是最新的。
sudo apt-get update
默认情况下,Ubuntu不包含构建Go所需的所有包,如其编译器,库和工具。这很容易通过安装安装构建和编译的依赖 build-essential ,一个包,其中包括 gcc编译C, g++编译C ++和 make ,构建自动化工具。
sudo apt-get install build-essential
安装完成后,您将拥有从源代码构建Go所需的所有必要工具。接下来,你需要Go 1.4二进制文件。

第2步 - 安装Go 1.4.3

Building Go 1.5+需要你有Go 1.4。这是因为Go 1.5+的工具链是用Go编写的。你可以使用Go 1.4或任何点发布(1.4.1,1.4.2或1.4.3);在本教程中,我们将使用Go 1.4.3。 与SHA1校验二进制文件去上可以找到 进入下载页面 。 下载文件称为 go1.4.3.linux-amd64.tar.gz你的home目录。
cd ~
curl -O https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz
虽然此文件是从真正的源下载的,但它仍然是一个很好的安全实践,以验证您下载的完整性。这通过比较在下载页面上提供的文件散列和下载的文件的散列最容易完成。 首先,获取您下载的文件的哈希值。
sha1sum go1.4.3.linux-amd64.tar.gz
将此命令的输出与Go下载页面上提供的校验和进行比较。
Output332b64236d30a8805fc8dd8b3a269915b4c507fe  go1.4.3.linux-amd64.tar.gz
如果校验和匹配,您可以解压缩文件。
tar xvf go1.4.3.linux-amd64.tar.gz
x国旗代表E X道, v告诉 tar来使用 v erbose输出(即列出提取文件),并 f让我们指定 ilename。 走1.4现在是在一个目录中称为解压 go ,但去构建脚本会在Go1.4二进制文件 ~/go1.4默认。 重命名使用的目录 mv命令。
mv go go1.4
现在你有必要的依赖来从源代码构建Go。如果你想将Go 1.4移出你的主目录到另一个位置,你可以按照下一步。如果没有,您可以转到第4步克隆Go源。

第3步 - 重新定位1.4.3(可选)

当GO构建脚本运行时,它会寻找Go1.4基于称为一个环境变量 GOROOT_BOOTSTRAP 。 如果该变量没有设置,它在默认情况下,构建脚本将假设 go1.4目录在你的主目录。 您可以使用 GOROOT_BOOTSTRAP如果你想去1.4移动到另一个位置的变量。 在这里,我们将其移动到 /usr/local/go1.4 。 首先,移动目录本身。
sudo mv go1.4 /usr/local
接下来,需要通过修改来设置环境中的路径 ~/.profile的文件。
sudo nano ~/.profile
在文件末尾,添加以下行:
〜/ .profile
. . .
export GOROOT_BOOTSTRAP=/usr/local/go1.4
保存文件并退出。要使此更改生效,请刷新您的个人资料。
source ~/.profile
接下来,您将克隆Go源。

第4步 - 获取来源

存储二进制文件去推荐的位置是 /usr/local ,这就是我们将在本教程中使用。但是,您可以将其存储在任何您喜欢的地方。 进入 /usr/local和使用git克隆库。
cd /usr/local
sudo git clone https://go.googlesource.com/go
我们需要执行 git clone ,因为具有root权限 /usr/local属于 root。如果要克隆转到用户具有写入权限的目录,可以在不使用sudo的情况下运行此命令。 注:比其他的地方去存放/usr/local会要求你设置GOROOT环境变量。了解更多关于Go的环境变量在 。 一旦克隆成功完成,它会创建一个 go在目录中 /usr/local 。移动到该目录。
cd go
在建设之前,我们需要选择我们想要的Go版本。

第5步 - 选择Go版本

Go源的每个版本都有不同的Git分支。分支的名称是:
  • master在发展的最新版本
  • go version稳定版本
在这里,我们将使用转到1.7.4,这意味着我们要使用的 go1.7.4分支。 警告:不推荐使用开发版本(即master生产转到分支)。它没有测试,也有可能是错误。开发版本适合应用程序测试,但只能使用发布版本进行生产。 要改变分支,使用 git checkout命令。 你需要,因为以root权限运行这些命令 /usr/local/usr/local/go1.4属于 root。
sudo git checkout go1.7.4
完成此步骤后,您已下载首选版本的Go源代码。您可以继续学习本教程的关键部分:构建Go本身。

第6步 - 建设

要建立旅途中,你需要执行一个bash脚本, src/all.bash ,附带源代码。该脚本将检查您是否具有所有必需的依赖关系,运行一些测试,并完成构建。 执行该脚本,但要注意,如果你改变了Go1.4.3二进制文件的位置,你将需要添加 -E标志(即 sudo -E bash ./all.bash )保存环境变量。
cd src
sudo bash ./all.bash
脚本将需要很短的时间才能完成。一旦构建完成,您将看到以下输出:
Output of src/all.bashALL TESTS PASSED

---
Installed Go for linux/amd64 in /usr/local/go
Installed commands in /usr/local/go/bin
*** You need to add /usr/local/go/bin to your PATH.
警告:在某些情况下,构建能够在Go1.7失败由于 time的测试失败。这是一个错误的结果。
Failed test output--- FAIL: TestLoadFixed (0.00s)
    time_test.go:943: Now().In(loc).Zone() = "-01", -3600, want "GMT+1", -3600
FAIL
FAIL    time    2.403s
...
2016/12/09 22:16:40 Failed: exit status 1
此问题的解决方法是手动应用错误修复。要做到这一点,创建一个新的分支和樱桃选择提交与修复。 Cherry在Git的 采摘是将更改特定承诺分支的过程。 此错误是固定在 提交c5434f2 ,所以将其添加到新创建的分支。
cd ..
sudo git checkout -b go1.7.4-timefix
sudo git cherry-pick c5434f2973a87acff76bac359236e690d632ce95
执行此操作后,可以再次运行脚本。 (不要忘了 -E如果移动转到1.4.3二进制标志。)
cd src
sudo bash ./all.bash
现在Go被构建,你需要为它设置一些环境变量。

第7步 - 设置Go变量

环境变量是定制Go安装的强大方法。我们将通过最重要和最有用的。 要开始使用去,你需要添加Go二进制文件的路径, /usr/local/ go/bin ,到 PATHGOPATH环境变量。 GOPATH就是Go的应用程序代码和二进制文件存储,我们会指定为 ~/work ,虽然你可以自由定制的。 这些变量添加到 ~/.profile的文件。使用您最喜欢的文本编辑器打开它:
nano ~/.profile
在文件末尾,添加以下行:
〜/ .profile
. . .
export GOPATH=$HOME/work
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
如果在非默认路径,也就是其他东西装Go然后 /usr/local/go ,你需要定义 GOROOT变量。在这种情况下,还要添加以下行:
〜/ .profile
export GOROOT=$HOME/go
export GOPATH=$HOME/work
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
保存文件并退出。要使这些更改生效,请刷新您的个人资料。
source ~/.profile
通过此步骤成功完成,您可以完全功能Go安装。接下来,我们将测试它,以确保一切正常工作。

第8步 - 测试Go安装

一个常见的测试方法是Go是工作是写和运行一个简单的“Hello,World”应用程序。 要做到这一点,首先我们将创建并移动到根据您的应用程序文件的目录 GOPATH 。 你可以选择任何你你转到路径中喜欢,但这里作为例子,我们将建立的那种层次的,如果你你需要 使用的GitHub来管理你的代码 。这个层次结构将工作,即使没有GitHub帐户,虽然。
mkdir -p $GOPATH/src/github.com/your_github_username/test_project
cd $GOPATH/src/github.com/your_github_username/test_project
接下来,创建一个名为“你好,世界”转到文件 hello.go
nano hello.go
将以下代码添加到文件中:
hello.go
package main

import "fmt"

func main() {
    fmt.Printf("Hello World!\n")
}
本例使用 fmt包,它实现如I / O功能 Printf()并定义 main()程序运行时将打印 的Hello World的功能。 保存并退出该文件,然后使用Go命令编译 install
go install github.com/your_github_username/test_project
编译完成后,可以使用以下命令运行它:
hello
你会看到 世界,你好!打印到终端,这意味着您的Go安装工作。

第9步 - 更改Go版本(可选)

本教程设置Go 1.7.4。如果要使用不同的版本,您需要更改活动的Git分支并重建Go。 要查看当前版本的Go,你可以用 go version
go version
Outputgo version go1.7.4 linux/amd64
例如,我们将切换到Go版本到1.6.4。此版本位于 go1.6.4分支,所以切换到它。
cd /usr/local/go
sudo git checkout go1.6.4
为了确保一切是最新的,运行 git pull来获取所选分支的最新变化。
sudo git pull origin go1.6.4
现在,像以前一样运行构建脚本,确保添加 -E如果在第3步搬迁进入1.4的标志。
cd src
sudo bash ./all.bash
这需要一些时间才能完成。构建完成后,您将看到以下输出:
Output of src/all.bashALL TESTS PASSED

---
Installed Go for linux/amd64 in /usr/local/go
Installed commands in /usr/local/go/bin
*** You need to add /usr/local/go/bin to your PATH.
你已经去设置变量 ~/.profile从第5步,所以这是所有你需要做的修改版本。

结论

通过从源代码构建和设置路径,您现在可以开发和测试Go应用程序或贡献Go代码库。 要了解更多信息,你可以探索 如何开始一起去如何服务转到应用与Martini ,这是一个GoWeb框架。 如果你正在寻找灵感,以促进开放源码,你可以阅读有关 中间人QEMU和走向libvirt的项目。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏