前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在Ubuntu 16.04上从源代码安装Go

如何在Ubuntu 16.04上从源代码安装Go

原创
作者头像
独木桥先生
修改于 2018-07-25 09:59:06
修改于 2018-07-25 09:59:06
1.3K0
举报

介绍

Go是由Google开发的一种现代开源编程语言。它很简单,并且拥有一组强大的库和工具,可以轻松搭建可靠,高效的应用程序。

如果您想根据最新版本的语言测试Go应用程序,为Go代码库做贡献,或者有更好的Go版本管理,则需要从源代码搭建Go。本教程将向您展示如何搭建Go,涵盖一些实际考虑因素,以及搭建“Hello,World”测试应用程序。

准备

要学习本教程,您需要:

  • 一个Ubuntu 16.04服务器,已经设置好一个可以使用sudo命令的非root的账户,服务器的内存大于1G。
  • 已安装Git
  • (可选)GitHub帐户。

没有服务器的用户可以购买和使用腾讯云服务器或者直接在腾讯云实验室Ubuntu服务器上机安装Go 。

第1步 - 安装依赖项

在开始之前,更新一下本地的软件包。

代码语言:txt
AI代码解释
复制
$ sudo apt-get update

默认情况下,Ubuntu没有提供搭建Go所需的所有软件包,例如编译器,库和工具。通过安装build-essential、包括gcc用于编译C 的包、g++用于编译C ++和make自动化搭建工具,这样可以很容易地安装搭建和编译依赖项。

代码语言:txt
AI代码解释
复制
$ sudo apt-get install build-essential

安装完成后,您将拥有从源代码搭建Go所需的所有工具。接下来,您需要Go 1.4二进制文件。

第2步 - 安装Go 1.4.3

建立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。

可以在Go的下载页面上找到带有SHA1校验和的二进制文件。将go1.4.3.linux-amd64.tar.gz文件下载到您的主目录。

代码语言:txt
AI代码解释
复制
$ cd ~
$ curl -O https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz

虽然此文件是从正版源下载的,但验证已下载内容的完整性仍然是一种良好的安全措施。通过比较下载页面上提供的文件哈希和下载文件的哈希,可以轻松完成此操作。

首先,获取您下载的文件的哈希值。

代码语言:txt
AI代码解释
复制
$ sha1sum go1.4.3.linux-amd64.tar.gz

将此命令的输出与Go下载页面上提供的校验和进行比较。

代码语言:txt
AI代码解释
复制
332b64236d30a8805fc8dd8b3a269915b4c507fe  go1.4.3.linux-amd64.tar.gz

如果校验和匹配,则可以解压缩文件。

代码语言:txt
AI代码解释
复制
$ tar xvf go1.4.3.linux-amd64.tar.gz

x标志代表 eXtract ,v告诉tar使用Verbose输出(即列出提取文件),并f让我们指定Filename。

Go 1.4现在解压缩在一个名为go的目录中,但Go的搭建脚本查找Go 1.4二进制文件,是在~/go1.4文件中查找。我们使用该mv命令重命名目录。

代码语言:txt
AI代码解释
复制
$ mv go go1.4

现在,您拥有从源代码搭建Go的必要依赖项。如果要将Go 1.4从主目录移到另一个位置,可以继续下一步。不过不想移动,就可以直接到步骤4,获取Go Source。

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

当Go搭建脚本运行时,它将根据名为GOROOT_BOOTSTRAP的环境变量查找Go 1.4 。如果未设置该变量(默认情况下),则搭建脚本将假定该go1.4目录位于主目录中。如果要将Go 1.4移动到其他位置,可以使用GOROOT_BOOTSTRAP变量。在这里,我们将其移至/usr/local/go1.4

首先,移动目录本身。

代码语言:txt
AI代码解释
复制
$ sudo mv go1.4 /usr/local

接下来,您需要通过修改~/.profile文件来设置环境中的路径。

代码语言:txt
AI代码解释
复制
$ sudo nano ~/.profile

〜/.profile文件末尾,添加以下行:

代码语言:txt
AI代码解释
复制
. . .
export GOROOT_BOOTSTRAP=/usr/local/go1.4

保存文件并退出。要使此更改生效,请刷新您的个人资料。

代码语言:txt
AI代码解释
复制
$ source ~/.profile

接下来,您将克隆Go源。

第4步 - 获取Go Sources

存储Go二进制文件的推荐位置是/usr/local。但是,您可以将它存储在您喜欢的任何地方。

进入/usr/local并使用Git克隆存储库。

代码语言:txt
AI代码解释
复制
$ cd /usr/local
$ sudo git clone https://go.googlesource.com/go

我们需要git clone使用root权限执行,因为/usr/local它由root拥有的。如果要克隆到用户具有写权限的目录,则可以在不使用sudo的情况下运行此命令。

注意:将Go存储在/usr/local以外的位置将需要您设置GOROOT环境变量。在步骤7中了解更多Go环境变量。

克隆成功完成后,将在/usr/local中创建一个go目录。接着进入该目录。

代码语言:txt
AI代码解释
复制
$ cd go

在搭建之前,我们需要选择我们想要的Go版本。

第5步 - 选择Go版本

Go源为每个可用版本提供不同的Git分支。分支机构的名称是:

  • master 用于开发中的最新版本
  • goversion 稳定版本

在这里,我们将使用Go 1.7.4,这意味着我们想要使用go1.7.4分支。

警告:不建议master在生产中使用Go 的开发版本(即分支)。它没有经过测试,可能存在错误。开发版本适用于应用程序测试,但仅使用已发布的版本进行生产。

要更改分支,请使用git checkout命令。您需要root权限才能执行这些命令,因为/usr/local/usr/local/go1.4root才有权限处理。

代码语言:txt
AI代码解释
复制
$ sudo git checkout go1.7.4

完成此步骤后,您已下载您喜欢的版本的Go源代码。您已准备好进入本教程的关键部分:搭建Go。

第6步 - 搭建Go

要搭建go,您需要执行src/all.bash,这是源代码附带的bash脚本。该脚本将检查您是否具有所有必需的依赖项,运行一些测试并完成搭建。

执行脚本,但请注意,如果更改了Go 1.4.3二进制文件的位置,则需要添加-E标志(即sudo -E bash ./all.bash)来保留环境变量。

代码语言:txt
AI代码解释
复制
$ cd src
$ sudo bash ./all.bash

脚本运行需要一点时间。搭建完成后,您将看到以下输出:

代码语言:txt
AI代码解释
复制
ALL 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.

警告:在某些情况下,由于time测试失败,搭建可能会在Go 1.7上失败。这是一个由BUG导致的结果。

代码语言:txt
AI代码解释
复制
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

这个BUG已在commit c5434f2中修复,因此将其添加到新创建的分支中。

代码语言:txt
AI代码解释
复制
$ cd ..
$ sudo git checkout -b go1.7.4-timefix 
$ sudo git cherry-pick c5434f2973a87acff76bac359236e690d632ce95

执行此操作后,您可以再次运行该脚本。(如果移动了Go 1.4.3二进制文件,请不要忘记-E标志。)

代码语言:txt
AI代码解释
复制
$ cd src
$ sudo bash ./all.bash

现在搭建了Go,您需要为它设置一些环境变量。

第7步 - 设置Go变量

环境变量是定制Go安装的有效方法。我们将介绍最重要和最有用的内容。

要开始使用Go,您需要将Go二进制路径/usr/local/go/bin添加到PATHGOPATH环境变量中。 GOPATH是存储Go应用程序代码和二进制文件的地方,我们将其指定为〜/ work,当然您可以自由地对其进行自定义。

将这些变量添加到~/.profile文件中。用您喜欢的文本编辑器打开它:

代码语言:txt
AI代码解释
复制
$ nano ~/.profile

〜/ .profile文件末尾添加以下行:

代码语言:txt
AI代码解释
复制
. . .
export GOPATH=$HOME/work
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

如果您在非默认路径中安装Go,,比如在/usr/local/go中,我们需要定义GOROOT变量。在这种情况下,还要添在〜/ .profile中添加:

代码语言:txt
AI代码解释
复制
export GOROOT=$HOME/go
export GOPATH=$HOME/work
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

保存文件并退出。要使这些更改生效,刷新了一下 profile

代码语言:txt
AI代码解释
复制
$ source ~/.profile

成功完成此步骤后,您将获得功能齐全的Go。接下来,我们将测试它以确保一切都按预期工作。

第8步 - 测试Go安装

一种常见的测试方法是编写并运行一个简单的“Hello,World”应用程序。

要做到这一点,首先我们将创建并移动到基于GOPATH的应用程序文件目录中。您可以在Go路径中选择任何您喜欢的内容,但是作为这里的示例,我们将设置如果使用GitHub管理代码所需的层次结构。即使没有GitHub帐户,这个层次结构也可以工作。

代码语言:txt
AI代码解释
复制
$ mkdir -p $GOPATH/src/github.com/your_github_username/test_project
$ cd $GOPATH/src/github.com/your_github_username/test_project

接下来,创建一个名为“Hello,World”的Go文件。

代码语言:txt
AI代码解释
复制
$ nano hello.go

将以下代码添加到hello.go文件中:

代码语言:txt
AI代码解释
复制
package main

import "fmt"

func main() {
    fmt.Printf("Hello World!\n")
}

此示例使用fmt包,它实现了Printf()之类的I/O函数,并定义了main()函数,该函数将在程序运行时打印Hello World

保存并退出文件,然后使用Go命令install进行编译。

代码语言:txt
AI代码解释
复制
$ go install github.com/your_github_username/test_project

编译完成后,可以使用以下命令运行它:

代码语言:txt
AI代码解释
复制
$ hello

你会看到Hello World!打印到终端,这意味着你的Go工作正常。

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

本教程设置了Go 1.7.4。如果要使用其他版本,则需要更改活动的Git分支并重建Go。

要查看当前的Go版本,您可以使用go version

代码语言:txt
AI代码解释
复制
$ go version
代码语言:txt
AI代码解释
复制
go version go1.7.4 linux/amd64

举个例子,我们将切换到Go版本为1.6.4。此版本位于go1.6.4分支中,因此切换到它。

代码语言:txt
AI代码解释
复制
$ cd /usr/local/go
$ sudo git checkout go1.6.4

要确保所有内容都是最新的,请运行git pull以获取所选分支的最新更改。

代码语言:txt
AI代码解释
复制
$ sudo git pull origin go1.6.4

现在,像以前一样运行搭建脚本,确保在步骤3中重新定位Go 1.4时添加-E标志。

代码语言:txt
AI代码解释
复制
$ cd src
$ sudo bash ./all.bash

这需要一些时间才能完成。搭建完成后,您将看到以下输出:

代码语言:txt
AI代码解释
复制
ALL 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应用程序或为Go代码库做贡献的基础,同时腾讯云开发者手册提供Go的中文开发文档,欢迎使用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文看懂主流区块链攻击底层逻辑 | 博文精选
作者 | 张一锋、朱立、练娜 责编 | Aholiab 来源 | 《区块链技术与应用安全分析报告》 出品 | 区块链大本营(ID:blockchain_camp) 区块链技术近年来快速发展,其价值得到越来越多认可的同时,技术与应用方面的安全挑战也逐渐凸显。 本文研究了针对区块链技术与应用的攻击方式及安全事件,提出了包括基础设施层、密码算法层、节点通讯层、共识协议层、运行平台层、智能合约层和系统应用层的七层安全模型,并针对模型各层对应的具体风险点,提出了解决方案。此外还探讨了区块链数据隐私问题。 区块链安全
区块链大本营
2023/03/31
1.1K0
一文看懂主流区块链攻击底层逻辑 | 博文精选
区块链安全技术:企业应用区块链技术时如何考量?
加密货币、区块链概念在 2017 年下半年以及 2018 年的前三周,都获得了更广泛的公众关注。也许从技术发展的本身来看,区块链技术在过去的一年中,并没有特别显著的发展,但是资本圈和公众的关注热度仍然成为该技术继续成长的助力。 当前的网络犯罪行为日益复杂,金融交易数据、健康医疗记录、个人身份信息和信息资产,都是黑客能够通过相应的攻击(DDoS,勒索等)进行获利的重要资产来源。而这项全新的区块链技术是否会成为网络安全的助力还是障碍?去中心化的、数字化的公开账本,这可能帮助增强平台的网络防御能力吗?应用共识机制
FB客服
2018/02/07
3.4K0
区块链安全技术:企业应用区块链技术时如何考量?
【区块链安全】-“区块链典型攻击、安全性分析 DDOS sybil eclipse”
1、保证数据的完整性。在共识机制下,只有全网大部分节点都认为这个记录正确时,记录的真实性才能得到全网的认可,才允许被写入区块中,保证了数据的完整性。
帆说区块链
2022/04/27
1.4K0
【区块链安全】-“区块链典型攻击、安全性分析 DDOS sybil eclipse”
区块链技术沙龙最全回顾:我们需要做怎样的区块链?
导读:在诸多新技术付诸应用之后,越来越多的技术从业者开始发现,似乎摩尔定律已经开始失灵了,两年的周期远远跟不上技术和信息爆炸的速度。但与此同时,我们却发现另一个定律出乎意外的开始在科技圈里盛行,那就是丛林法则。狼性文化也好,剩者为王也好,云计算、人工智能、再到区块链等技术无不在彰显一个亘古不变的真理,适者生存。 那么如今大为火热的区块链技术是如何适应当今的互联网环境的呢?从无到有,从疯狂到理智,从虚拟到价值,区块链的发展正在逐步走上正轨。攻克了性能、去中心化、数据安全等诸多难关之后,区块链已经变得越发
腾讯技术工程官方号
2018/10/09
1.2K0
区块链技术沙龙最全回顾:我们需要做怎样的区块链?
区块链赋能金融:技术落地应用提速
时下,区块链技术的应用场景越来越广泛,尤其在赋能金融方面,区块链应用场景落地提速显著。业内人士表示,利用区块链技术,不仅可以溯源网贷交易、完成跨境支付与清算,大幅提升金融服务的效率,而且还能化解金融交易纠纷,有望解决金融交易中的信任和安全问题,推动数字经济更好发展。
源中瑞科技ruiecjo
2019/06/19
1K0
区块链赋能金融:技术落地应用提速
区块链众筹的创想N次方
近两年区块链逐渐成为热门话题,不断在媒体、学术和金融界出现。国内外大量的知名企业纷纷加入针对区块链研究的社区和联盟,争取在区块链技术爆发之前,了解区块链技术,应用区块链改变自身业务形态。区块链研究不断
用户1310347
2018/03/02
2K0
区块链众筹的创想N次方
深入探讨区块链技术的安全性
区块链技术自从诞生以来,已经在金融、物流、医疗等诸多领域展现出巨大的潜力。然而,随着其应用的不断深入,区块链的安全性也成为了人们关注的焦点。本文将围绕区块链技术的安全性展开详细分析,探讨其优点、挑战以及解决方案,并通过代码示例说明其中的技术原理。
Echo_Wish
2025/02/12
1190
深入探讨区块链技术的安全性
谁说区块链保护隐私的?
我们当然知道隐私保护很重要,但是我以为区块链技术其实是放大了隐私保护的需求,并没有有效地解决这个问题。隐私保护里面有多少是区块链技术的功劳,就看我们往区块链这个概念里塞多少东西了。
ThoughtWorks
2020/06/09
1.2K0
【区块链应用】-“面向分布式电力交易的区块链算法应用研究综述”
摘要:当下分布式电力交易呈现出中心化网络风险验证和市场竞争过小等问题。区块链技术去中心化、防篡改及分布式存储等特点与分布式电力交易中存在的问题高度契合,将区块链技术应用于分布式电力交易中受到广泛关注。文章从安全防护类算法、数据同步类算法及共识类算法3个方面梳理了区块链相关算法,将其结合分布式电力交易的部分适用场景展开分析,总结现有区块链核心算法在分布式电力交易中优缺点。最后,对区块链技术现在存在的问题及各类算法在未来分布式电力交易的适用性进行分析,通过对3类算法分析综述,从安全、共享、共识3个方面提高分布式交易的交易速率和可靠性,为未来区块链核心算法在分布式电力交易领域的应用提供研究思路。
帆说区块链
2022/04/26
8640
【区块链应用】-“面向分布式电力交易的区块链算法应用研究综述”
关于区块链和互联网
物联网(IoT)是新兴技术中最令人兴奋的案例之一。将数十亿台设备连接到网络的技术令人着迷,并且已经在农业,制造业,消费技术以及几乎所有机械密集型行业中得到了广泛的应用。它也有一个大问题:在目前阶段,物联网在客观上是不可行和危险的。
死鱼喜欢猫
2018/03/21
2K0
关于区块链和互联网
区块链技术原理
随着互联网技术的不断发展和应用,数据的数量和价值也在不断增长,然而如何保护数据的安全和隐私,如何有效地管理和交换数据成为了一个日益重要的问题,区块链技术作为一种新兴的分布式数据库技术具有去中心化、安全和透明等特点,在数据管理和交易方面具有广泛的应用前景。本文将从区块链技术的基本概念、工作原理等方面进行介绍和概述,通过对区块链技术的深入了解,读者可以掌握其基本原理和应用方法为未来的区块链技术应用和创新提供帮助和指导
Al1ex
2023/08/10
5680
区块链技术原理
探索区块链技术的核心特性与价值
随着数字时代的到来,区块链技术正成为新兴技术领域中备受瞩目的一员。它被广泛认为是一种革命性的技术,可能彻底改变我们对数据和交易的理解方式。本文将探讨区块链技术的核心特性以及它所带来的价值。
人不走空
2024/03/12
5280
【区块链丨主题周】区块链信用机制与应用场景介绍
将有意义的事件记录下来,是形成人类文明的重要内容之一。《史记》生动地记录和展开了古代社会人们生活广阔的画面,历史价值弥足珍贵。如果从5000年前开始,人类就将事件记录下来,并且不能篡改、没有丢失,那么追溯早期人类的社会生活状况就无须现代的考古和历史学研究了。
博文视点Broadview
2020/06/11
1K0
【区块链丨主题周】区块链信用机制与应用场景介绍
共识机制:区块链技术的根基
技术定义是:共识机制是一个群体决策的流程,群体中的个体会执行和支持对群体其他个人最好的决定。这是一个个体需要支持大多数人决定的解决方式,不管他们意愿如何。
cloudchainchina
2018/09/19
4.1K0
共识机制:区块链技术的根基
黑客频频攻击区块链安全软肋,如何保证区块链的安全?
区块链软件漏洞造成的安全问题不少见,从加密货币钱包盗窃到智能合约攻击再到加密货币交易所被攻击,各种安全事件层出不穷。
qq-2723379296
2018/10/22
1.2K1
黑客频频攻击区块链安全软肋,如何保证区块链的安全?
[区块链] 区块链小白菜系列入门知识详解(〇)
概念:Hash是一种将数据映射为固定大小值的算法。它通过一系列计算和转换,生成唯一的hash值。
荷秋
2024/01/19
9540
[区块链] 区块链小白菜系列入门知识详解(〇)
区块链密码学:基础知识、应用与未来发展
区块链技术,作为一种分布式、去中心化的数据管理方式,密码学在其安全性和可靠性方面发挥着至关重要的作用。本文将详细介绍区块链密码学的基础知识、应用以及未来发展趋势。
人不走空
2024/02/20
6500
区块链技术
最近影响极大的“勒索”病毒袭转全球,造成数以万计的电脑中毒,主要是通过AES/RSA加密电脑办公文件,此种加密方式没有私钥无法解密,黑客提供了解密的方式,就是按黑客提供的交易方式“比特币”交易,所以现
Java技术栈
2018/03/29
10.3K1
《区块链为翼,开启物联网数据可信共享新时代》
在万物互联的时代,物联网(IoT)已深入到生活和产业的各个角落。从智能家居设备记录的日常能耗,到工业生产线上传感器采集的设备运行参数,物联网设备源源不断地产生海量数据。这些数据是宝贵的资源,能为优化生活、提升生产效率、推动创新提供关键依据。但目前,物联网数据共享面临诸多困境,数据的可信性难以保障,而区块链的分布式账本技术,正为这一难题提供了解决思路。
程序员阿伟
2025/01/24
940
《区块链为翼,开启物联网数据可信共享新时代》
相关推荐
一文看懂主流区块链攻击底层逻辑 | 博文精选
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档