go1.5源代码安装
2015-12-20 20:44
162 查看
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 的用户我强烈建议还是使用二进制包进行安装。不折腾!
同时,由于需要编译 Go 1.4,所以必须安装 C 相关的工具:
##目录结构
2012 年的时候,我曾经翻译过一篇文章《GO 环境设置》。虽然那个时候 Go 的代码还在使用 hg 进行版本控制,同时 Go 1 也没有正式发布,不过那篇文章中介绍的目录设置方式,我却一直使用至今,其结构如下:
其中
不过,由于 Go 1.5 需要两个版本的 Go 并存,那么这个目录结构也就需要做相应的调整。最终如下,稍候我会详细介绍。
由于现在有两个版本的 Go 代码并存,所以我们需要建立一个软链接指向所需要的版本的代码目录,例如:
这样,就 GOROOT 的值就应该设置为:
有了这两个环境变量就足够了(交叉编译和环境微调不在本文讨论范围内)。
为了能够方便的使用 go 命令,还需要将
然后让 GOROOT 的软链接目录指向实际保存 Go 1.4 代码的目录:
这时目录结构为:
环境变量的值为:
进入目录
经过一个短暂的编译和一个漫长的测试之后,Go 1.4 应该就部署完成了。
使用
$ 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 1.5 所在的代码分支中。
有一点需要特别说明一下:由于 Go 1.5 预计要到八月才正式发布,所以要到那个时候才会有 go1.5 这个标签出现。因此,当前的 master 分支实际上就是功能冻结的 Go 1.5 的代码分支。
由于已经将 GOROOT 设置为
为了能够编译 Go 1.5,还需要额外设置一个叫做 GOROOT_BOOTSTRAP 环境变量,指向 Go 1.4 所在的目录。同时为了能够向后兼容,这个变量也使用软链接的方式进行指向:
这时目录结构为:
环境变量的值为:
进入目录
又一个短暂的编译和一个漫长的测试之后,Go 1.5 应该就部署完成了。
使用
go version devel +6551808 Wed May 27 04:48:29 2015 +0000 linux/amd64
近期,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/binGOROOT_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
相关文章推荐
- python windows下的安装配置以及django的学习经验
- 设计模式系列(十三)迭代器模式(Iterator Pattern)
- JavaWeb Session问题整理
- SecureCRT中python脚本编写
- .Net学习(三):初识ASP.Net
- C++学习笔记37——析构函数
- C# 实现可克隆(ICloneable)的类型
- JAVA File的创建及相对路径绝对路径
- 用Eclipse跑Hadoop程序的注意事项
- HBase JavaAPI操作示例
- JavaWeb--概述
- PHP$this的用法和访问限定符
- Python爬虫爬取百度贴吧多线程版
- Java类中的成员变量的赋值方法
- springmvc(二)非注解的处理器映射器和适配器
- Eclipse主题修改,换个颜色换个心情撸代码吧
- 新手入门,学习java从小白到大神应该从何做起?
- Lua知识备忘录
- Java常用类和方法重点总结
- window7下配置python2.7+tornado3.3开发环境