http://studygolang.com/articles/3188

近期,Go Team 连续放出了几个大招来介绍即将在八月问世的 Go 1.5 这个划时代的版本。Rob 和 Andrew 分别在《Go in Go》和《The State of Go》中详细说明了出现在 Go 1.5 中的重要特性和细节变化。在这个版本中最主要的变化是移除了所有 C 代码,不论是 runtime 还是编译器都使用 Go 语言和一小部分的汇编来实现——也就是人们常说的自举。但是这样做也就意味着,Go 在 1.5 和以后的版本中,使用源代码构建 Go
开发环境将面临“鸡生蛋,蛋生鸡”的麻烦(当然了,如果你直接“买鸡蛋”——使用二进制安装包——是没有这个问题的)。

在 Go1.4 及更早的版本中,会使用 GCC 先编译一个使用 C 语言编写的,仅具有基本功能的小编译器作为构建 Go 环境的引导工具。也就是说必须要安装 GCC、make 等 C 语言相关的工具才能从源代码构建 Go 的开发环境。而据 Rob 的讲义和其撰写的《Go 1.5 Bootstrap Plan》中介绍的,Go 1.5 将不再有 C 语言的参与,反而需要使用 Go 1.4 版本的工具链进行编译。那么也就意味着,从源代码开始构建 Go 1.5 需要两个版本并存。几年前,有许多人折戟在GOROOT/GOPATH 的坑里。现在还需要两个版本的 Go 并存,想想似乎都是个挺麻烦的事情。

对于 Go 来说,大道至简!所以通过这篇文章里我想简单介绍一下如何使用源代码构建 Go 1.5 开发环境。由于“鸡生蛋,蛋生鸡”的缘故,需要从构建 Go 1.4 的开发环境开始讲起。

需要说明的是,以下所有内容都是在 Ubuntu 14.04 中演示操作的,但只要是符合 POSIX 标准的系统,以下操作应该都是一致的。Windows 的用户我强烈建议还是使用二进制包进行安装。不折腾!

准备工作

一个“干净”的系统是必须的,这里的“干净”是指没有设置过 GOROOT/GOPATH/GOBIN 之类的环境变量。如果之前已经配置过 Go 的环境,那只能酌情调整或删除重新设置了。

同时,由于需要编译 Go 1.4,所以必须安装 C 相关的工具:

$ apt-get install gcc libc6-dev

##目录结构

2012 年的时候,我曾经翻译过一篇文章《GO 环境设置》。虽然那个时候 Go 的代码还在使用 hg 进行版本控制,同时 Go 1 也没有正式发布,不过那篇文章中介绍的目录设置方式,我却一直使用至今,其结构如下:

$HOME/golang/
├── 3rdpkg
├── go
└── own

其中 $HOME/golang/3rdpkg$HOME/golang/go 和 $HOME/golang/own 目录应按照顺序加入环境变量 GOPATH中。这样的好处是在使用 go get 获取 Go 包的时候会直接导入到 GOPATH 的第一个路径,也就是 3rdpkg 这个子目录中。这样可以将第三方包,Go 的代码和自己的工作目录区分开来。

不过,由于 Go 1.5 需要两个版本的 Go 并存,那么这个目录结构也就需要做相应的调整。最终如下,稍候我会详细介绍。

环境变量

前面已经提到了 GOPATH 的设置:

GOPATH=$HOME/golang/3rdpkg:$HOME/golang/go:$HOME/golang/own

由于现在有两个版本的 Go 代码并存,所以我们需要建立一个软链接指向所需要的版本的代码目录,例如:

$HOME/golang/
├── 3rdpkg
├── go -> go1.4/
├── go1.4
└── own

这样,就 GOROOT 的值就应该设置为:

GOROOT=$HOME/golang/go

有了这两个环境变量就足够了(交叉编译和环境微调不在本文讨论范围内)。

为了能够方便的使用 go 命令,还需要将 $GOROOT/bin/ 加入 PATH 中:

PATH=$PATH:$GOROOT/bin/

安装 Go 1.4

使用 git 命令获取 Go 1.4 的完整代码。当前最新的 1.4 版本是 1.4.2,所以:

$ cd $HOME/golang/
$ git clone -b go1.4.2 https://github.com/golang/go.git go1.4

然后让 GOROOT 的软链接目录指向实际保存 Go 1.4 代码的目录:

$ ln -s go1.4 go

这时目录结构为:

$HOME/golang/
├── 3rdpkg
├── go -> go1.4/
├── go1.4
└── own

环境变量的值为:

GOPATH=$HOME/golang/3rdpkg:$HOME/golang/go:$HOME/golang/own
GOROOT=$HOME/golang/go
PATH=$PATH:$GOROOT/bin

进入目录 $HOME/golang/go/src,运行 all.bash 脚本。

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

经过一个短暂的编译和一个漫长的测试之后,Go 1.4 应该就部署完成了。

使用 go version 命令可以看到当前 Go 版本为 1.4.2:

$ go version go1.4.2 linux/amd64

安装 Go 1.5

由于 Go 1.5 需要基于 Go 1.4 构建,所以 Go 1.5 需要一个独立的目录放置(实际上用同一个目录是可以的,不过需要额外的许多设置,不折腾)。

由于已经克隆了 Go 的代码库,可以直接复制 go1.4 这个目录到目录 go1.5,然后用命令:

$ go checkout -b master

切换到 Go 1.5 所在的代码分支中。

有一点需要特别说明一下:由于 Go 1.5 预计要到八月才正式发布,所以要到那个时候才会有 go1.5 这个标签出现。因此,当前的 master 分支实际上就是功能冻结的 Go 1.5 的代码分支。

由于已经将 GOROOT 设置为 $HOME/golang/go,因此只需要这个软链接重新指向 Go 1.5 代码所在目录即可,而无须修改环境变量。

$ cd $HOME/golang
$ unlink go
$ ln -s go1.5 go

为了能够编译 Go 1.5,还需要额外设置一个叫做 GOROOT_BOOTSTRAP 环境变量,指向 Go 1.4 所在的目录。同时为了能够向后兼容,这个变量也使用软链接的方式进行指向:

$ ln -s go1.4 go-bootstrap

这时目录结构为:

$HOME/golang/
├── 3rdpkg
├── go -> go1.5/
├── go-bootstrap -> go1.4/
├── go1.4
├── go1.5
└── own

环境变量的值为:

GOPATH=$HOME/golang/3rdpkg:$HOME/golang/go:$HOME/golang/own
GOROOT=$HOME/golang/go
PATH=$PATH:$GOROOT/bin
GOROOT_BOOTSTRAP=$HOME/golang/go-bootstrap

进入目录 $HOME/golang/go/src,运行 all.bash 脚本。

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

又一个短暂的编译和一个漫长的测试之后,Go 1.5 应该就部署完成了。

使用 go version 命令可以看到当前 Go 版本为开发编号:

go version devel +6551808 Wed May 27 04:48:29 2015 +0000 linux/amd64

转载于:https://www.cnblogs.com/mavs/p/5061754.html

go1.5源代码安装相关推荐

  1. linux下从git获取有权限的代码,linux下从源代码安装git

    之所以有这样的需求,是因为部分预安装的git版本太低,很多功能没有并且安全性存在问题. 比如git submodule add xxx@host:yyy.git必须在父repo的root目录安装,而新 ...

  2. linux git yum安装包下载,在CentOS 8上用Yum及源代码安装Git的方法

    本文介绍在CentOS 8操作系统上用Yum安装Git,及从源代码安装Git.建议的最简单的安装Git方法是使用yum软件包管理工具进行安装,如果要从源代码安装最新的稳定版Git,请从源代码安装. 用 ...

  3. 《精通Nginx》——1.2 从源代码安装Nginx

    本节书摘来自异步社区<精通Nginx>一书中的第1章,第1.2节,作者: [瑞士]Dimitri Aivaliotis 更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  4. kangle web server源代码安装简明教程

    kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...

  5. Tesorflow源代码安装方式以及错误的解决方法

    Tesorflow源代码安装方式以及错误的解决方法 参考文章: (1)Tesorflow源代码安装方式以及错误的解决方法 (2)https://www.cnblogs.com/greentomlee/ ...

  6. Linux 源代码 安装vsftpd 2.3.4

    Linux 源代码 安装vsftpd 2.3.4 2011-10-22 12:15:40|  分类: Unix/Linux 笔记 |  标签:linux  vsftpd  |举报|字号 订阅 wget ...

  7. php源码安装空白,源代码安装完成后,页面一片空白?

    php5 我上面说的表的初始化数据方面到底有没有问题呢? 源代码安装过程的提示分别如下: ============step 1============ 统检查 检查项 当前配置 检查结果 如何修改 P ...

  8. linux源码安装php缺少动态库,php源代码安装常见错误解决办法

    php源代码安装常见错误解决办法 错误:configure: error: libevent >= 1.4.11 could not be found 解决:yum -y install lib ...

  9. CentOS 6.4用源代码安装LNMP环境

    2019独角兽企业重金招聘Python工程师标准>>> CentOS 6.4用源代码安装LNMP环境 对于在Linux系统中安装web服务其实都是差不多的,只是软件的选择不一样,不过 ...

  10. 字符界面运行mysql_详解linux系列之字符界面下MySQL+apache+php的源代码安装

    详解linux系列之字符界面下MySQL+apache+php的源代码安装 在前面介绍了linux和在字符下安装,下面我来介绍一下程序包的安装. 大家也许都知道在linux安装程序的时候后用rpm包安 ...

最新文章

  1. 真相了 | 敲代码时,程序员戴耳机究竟在听什么?
  2. 史上最详细微信小程序授权登录与后端SprIngBoot交互操作说明,附源代码,有疑惑大家可以直接留言,蟹蟹 2021.11.29完善更新小程序代码,
  3. iphone3G恢复到3.1.2遇到的问题
  4. 汇编语言(六)之输出字符的前导后字符
  5. 实习日志_【人医札记】护理实习日志
  6. python登录系统的实现方法_python实现简单登陆系统
  7. 的引用_懵!啥是Java软引用、弱引用、虚引用?
  8. 第 17 章 命令模式
  9. 数据结构——二叉链表创建二叉树(C语言版)
  10. 商务经济与统计中涉及到的所有公式
  11. SPSS学习(五)独立样本t检验
  12. android 禁止其他应用开机启动项,禁止各种APP开机后自动运行的方案
  13. 操作系统:动态分区存储(首次适应算法、最佳适应算法)
  14. “AI安全”风起云涌,拿下A轮融资的瑞莱智慧如何与群雄共舞?
  15. 风影墙纸,一天看N回。
  16. Java 基础核心知识
  17. java圈子_从JAVA入了这个圈子,有多少老司机和他一样?
  18. 计算机网络本地连接被禁用说明什么,本地连接被禁用导致无法上网怎么解决
  19. 深度解析|硬盘协议大全,终于搞明白SCSI、IDE、FC、SATA……
  20. robots机器人疾风 war_不正经评测之:《战争机器人War Robots》

热门文章

  1. jQuery的DOM操作之捕获和设置
  2. 关于mysql数据库在输入password后,滴的一声直接退出界面的解决的方法(具体办法)...
  3. 对语音通话占用带宽的理解
  4. 从0到1构建数据生态系列(二):拆解架构蓝图
  5. Ajax Session Timeout处理
  6. [Tarjan四连] TarjanLCA
  7. vue中动画效果的实现
  8. vue属性绑定加载图片不成功
  9. 慕课网仿去哪儿项目笔记--(一)-初始化准备
  10. vgcreate 创建卷组