Go语言环境安装详细介绍
工具链介绍
go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo。
官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式。gc工具链对操作系统和CPU类型的支持情况如下:
操作系统 | CPU类型 | 备注 |
---|---|---|
FreeBSD 8 or later | amd64, 386, arm | Debian GNU/kFreeBSD not supported; FreeBSD/ARM needs FreeBSD 10 or later |
Linux 2.6.23 or later with glibc | amd64, 386, arm | CentOS/RHEL 5.x not supported; no binary distribution for ARM yet |
Mac OS X 10.6 or later | amd64, 386 | use the gcc** that comes with Xcode** |
Windows XP or later | amd64, 386 | use MinGW gcc. No need for cygwin or msys. |
对于其它操作系统或CPU类型,需要从源码编译gc工具链或使用gccgo。
- 如果使用cgo,则需要安装gcc;
- Xcode command tool是Xcode的一部分,它包含gcc编译器, 可以从Xcode的Componts->Downloads对话框中下载该tool。
安装
二进制安装
- 从官网下载二进制包如*go1.6.linux-amd64.tar.gz*
解压到
/usr/local
目录:- $ tar -C /usr/local -xzf go$VERSION.$GOOS-$GOARCH.tar.gz
将/usr/local/go/bin添加到PATH中:
- $ export PATH=$PATH:/usr/local/go/bin
go默认假设被安装到/usr/loca/go,如果被安装到其它位置,则需要设置GOROOT环境变量。例如,二进制包被解压到$HOME目录,则设置如下:
- $ export GOROOT=$HOME/go
- $ export PATH=$PATH:$GOROOT/bin
注意:只有当将go安装到非/usr/local目录时才需要设置GOROOT变量。
从源码编译安装
安装Go编译器二进制文件
1.4版本后的Go工具链是用go语言写的,如果要构建它,系统需要安装Go编译器:
如果系统已经有>= 1.4版本的go工具链,则将
GOROOT_BOOTSTRAP
变量设置为所在目录;- $ unset GOROOT GOPATH #如果系统已经有go工具链,需要清除`$GOPATH`和`$GOROOT`变量;
- $ export GOROOT_BOOTSTRAP=$HOME/local/go
- $ unset GOROOT GOPATH #如果系统已经有go工具链,需要清除`$GOPATH`和`$GOROOT`变量;
否则,需要下载1.4版本的go工具链,该版本是C写的,只依赖gcc和glibc;可以下载二进制或编译并安装源码,然后将
GOROOT_BOOTSTRAP
变量设置为所在目录;- $ cd /tmp
- $ git clone git@github.com:golang/go.git
- $ cd go
- $ git checkout -b 1.4.3 go1.4.3
- $ cd src
- $ ./all.bash #编译go 1.4.3
- $ export GOROOT_BOOTSTRAP=/tmp/go/go #GOROOT\_BOOTSTRAP缺省值为`$HOME/go1.4`,如果安装到其它位置,则需要重新定义;
- $ cd /tmp
使用GOROOT_BOOTSTRAP变量指定Go工具链位置(如果位于$HOME/go1.4,则无需指定)后,可以执行源码中的bootstrap.bash
脚本,生成支持$GOOS
、$GOARCH
指定的目标操作系统和架构的新工具链:
- $ GOOS=linux GOARCH=ppc64 ./bootstrap.bash
该命令生成的工具链位于../../go-${GOOS}-${GOARCH}-bootstrap.
目录,可以设置为变量GOROOT_BOOTSTRAP
的值,用于后续编译源码;
编译最新的go源码
设置git代理:
- $ git config http.proxy http://user:passwd@host:port
- $ git config https.proxy https://user:passwd@host:port
- $ git config http.proxy http://user:passwd@host:port
设置go get代理
- $ export http_proxy=http://user:passwd@host:port
获取源代码:
直接下载或者从git仓库clone。
从官网下载
- $ wget https://golang.org/dl/go$VERSION.src.tar.gz
- $ tar -xzvf go$VERSION.$OS-$ARCH.tar.gz
- $ wget https://golang.org/dl/go$VERSION.src.tar.gz
从git代码库clone:
- $ git clone https://go.googlesource.com/go #需翻墙
- $ git clone https://github.com/golang/go.git
- $ cd go
- $ git checkout go1.6 #也可以切换到其它分支如master
- $ git clone https://go.googlesource.com/go #需翻墙
编译源代码
- $ pwd
- /tmp/
- $ cd go/src
- $ ./all.bash #使用`GOROOT_BOOTSTRAP`指定的go 1.4版本以上的工具链来编译go源码
- ...
- ALL TESTS PASSED
- ---
- Installed Go for linux/amd64 in /tmp/go
- Installed commands in /tmp/go/bin
- *** You need to add /tmp/go/bin to your PATH.
go 会将安装位置记录到二进制的
GOROOT
变量中,如果需要调整安装目录,可以设置$GOROOT_FINAL=/path/to/goTree
, 这样编译完后会提示将/tmp/go
移动到/path/to/goTree
目录(这个参数只能在编译阶段有效,如果在编译后移动Go tree则参考步骤5)。- $ ls /tmp/go -F
- api/ AUTHORS bin/ CONTRIBUTORS doc/ favicon.ico include/ lib/
- LICENSE misc/ PATENTS pkg/ README robots.txt src/ test/ VERSION
- $ ls /tmp/go/bin #源码包自带的二进制工具命令, 没有 godoc
- go gofmt
- $ ls /tmp/go/pkg/tool/linux_amd64/
- addr2line asm cgo compile dist doc fix link nm objdump pack pprof tour yacc
- $ /tmp/go/bin/go env |grep -E 'GOROOT|GOTOOLDIR'
- GOROOT="/tmp/go" #可见Go tree被安装到预期位置
- GOTOOLDIR="/tmp/go/pkg/tool/linux_amd64"
将
/tmp/go/bin
加入到PATH中,即可使用。- $ pwd
移动 Go 源码目录
可以将编译过的Go Tree移动到其它目录,然后修改
GOROOT
环境变量即可。- $ mkdir /tmp/xxx
- $ export GOROOT=/tmp/xxx
- $ mv * /tmp/xxx
- $ /tmp/xxx/bin/go env |grep -E 'GOROOT|GOTOOLDIR'
- GOROOT="/tmp/xxx" #Go tree和工具链自动调整
- GOTOOLDIR="/tmp/xxx/pkg/tool/linux_amd64"
- #设置PATH和GOPATH
- $ export PATH=/tmp/xxx/bin:$PATH
- $ which go
- /tmp/xxx/bin/go
- $ go version
- go version go1.4 linux/amd64
- $ mkdir /tmp/xxx
安装额外的工具如
godoc
,vet
,cover
(二进制发布版中包含这些工具,无需额外安装):一些Go工具位于go.tools仓库中,需要额外安装。
- $ #安装所有工具:
- $ go get golang.org/x/tools/cmd/... #...是通配符,参考: go help packages
- $ go get golang.org/x/tools/cmd/godoc #只安装godoc工具
- $ ls bin/ #多了godoc
- go godoc gofmt
- $ ls pkg/tool/linux_amd64/ #多了vet,cover
- addr2line asm cgo compile cover dist doc fix link nm objdump pack pprof tour trace vet yacc
go 命令会将
godoc
安装到$GOROOT/bin
或者$GOBIN
,其它的go tool
如cover
、vet
安装到$GOROOT/pkg/tool/$GOOS_$GOARCH
。可以用go tool cover
或go tool vet
命令来调用后面目录中的程序。- $ #安装所有工具:
工具链测试
创建和设置GOPATH(非必须):
- $ mkdir -p $HOME/go/{src,bin,pkg}
- $ export GOPATH=$HOME/go
- $ mkdir $HOME/go/src/demo
- $ cd !$
- $ mkdir -p $HOME/go/{src,bin,pkg}
编写一个测试文件如 hello.go
- package main
- import "fmt"
- func main() {
- fmt.Printf("hello, world\n")
- }
编译并执行, -x选项可以打印出编译过程
- $ go build -x demo.go
- WORK=/tmp/go-build333633893
- mkdir -p $WORK/command-line-arguments/_obj/
- mkdir -p $WORK/command-line-arguments/_obj/exe/
- cd /home/ksyun/golang/src
- /home/ksyun/local/go/pkg/tool/linux_amd64/compile -o $WORK/command-line-arguments.a -trimpath $WORK -p main -complete -buildid ed5feda32ea5b5ab51ac7fe9d1193005f6f99836 -D _/home/ksyun/golang/src -I $WORK -pack ./demo.go
- cd .
- /home/ksyun/local/go/pkg/tool/linux_amd64/link -o $WORK/command-line-arguments/_obj/exe/a.out -L $WORK -extld=gcc -buildmode=exe -buildid=ed5feda32ea5b5ab51ac7fe9d1193005f6f99836 $WORK/command-line-arguments.a
- mv $WORK/command-line-arguments/_obj/exe/a.out demo
- hello, world
- $ go build -x demo.go
环境变量(可选)
编译工具链可以使用以下环境变量进行配置;
$GOROOT
构建时,值为all.bash
脚本所在目录的父目录,会被写入到生成的二进制中;如果后续移动了安装目录,则使用该变量指定新的Go Tree顶层目录;$GOROOT_FINAL
一般和$GOROOT
一致,定义在构建后的安装阶段安装到的位置;$GOOS
和$GOARCH
交叉编译时,分别定义目标操作系统和体系结构,默认和$GOHOSTOS
和$GOHOSTARCH
一致。各组合如下:- $GOOS $GOARCH
- android arm
- darwin 386
- darwin amd64
- darwin arm
- darwin arm64
- dragonfly amd64
- freebsd 386
- freebsd amd64
- freebsd arm
- linux 386
- linux amd64
- linux arm
- linux arm64
- linux ppc64
- linux ppc64le
- linux mips64
- linux mips64le
- netbsd 386
- netbsd amd64
- netbsd arm
- openbsd 386
- openbsd amd64
- openbsd arm
- plan9 386
- plan9 amd64
- solaris amd64
- windows 386
- windows amd64
- $ #交叉编译
- $ GOOS=windows GOARCH=amd64 go build
- $ file pssh.exe
- pssh.exe: PE32+ executable for MS Windows (console) Mono/.Net assembly
- $GOOS $GOARCH
$GOHOSTOS
和$GOHOSTARCH
编译工具链所在主机的操作系统和架构类型,必须与所在操作系统和CPU架构类型兼容;$GOBIN
如果设置,则所有的Go二进制程序将安装到此目录,而不是默认的$GOPATH/bin
参考
Go语言环境安装详细介绍的更多相关文章
- Cloudera Manager (centos)安装详细介绍
文章全部来自:Cloudera Manager (centos)安装详细介绍http://www.aboutyun.com/thread-9190-1-1.html(出处: about云开发) 这里已 ...
- 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置
[Go语言入门系列]前面的文章: [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞懂怎么用接口 本篇文 ...
- 【Go】 Go 语言环境安装
安装环境/工具 1.Linux(CentOS 7.4版) 2.go1.11.2.linux-amd64.tar Go 语言环境安装 1.下载安装包 安装包下载地址为:https://golang.or ...
- Go 语言环境安装
Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为:https://golang.org/dl/. 各个系统对应的包名: 操 ...
- Jmeter环境搭建详细介绍
[前言] 欢迎来到我的博客,知识在于分享,如有不足之处,希望指出,大家共同进步学习! [JDK检查和安装] 现在市面上比较普遍的性能测试工具无非就LoadRunner和Jmeter,本人一直秉持着便宜 ...
- appium整个环境安装详细教程(重要)
环境依赖 Node.js Appium Appium-desktop Appium-doctor Appium-Python-Client Python JDK Andriod SDK 以上所需的软件 ...
- P4语言环境安装(一)前端编译器p4c、后端编译器p4c-bm2-ss
这个P4安装环境是在2020-2-8安装的,安装环境卡了我好几天,把遇到的问题记录下来,有需要的同学可以参考一下,要是说错了或者有问题的话,评论或mail:guidoahead@163.com联系我都 ...
- go语言环境安装
Go 是一个开源的编程语言,被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言. 1. 准备环境并安装依赖包 创建centos 7.6 64bit的虚拟机. 安装 ...
- Go语言环境安装-Mac
1.环境安装 Go SDK下载和安装,下载地址为:https://golang.org/dl/ Visual Studio Code下载和安装,下载地址为:https://code.visualstu ...
随机推荐
- myeclipse6.5使用tomcat7报java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFact ...
- VGG16提取图像特征 (torch7)
VGG16提取图像特征 (torch7) VGG16 loadcaffe torch7 下载pretrained model,保存到当前目录下 th> caffemodel_url = 'htt ...
- 在不同的浏览器使用不同的css样式,解决浏览器兼容问题
区别IE6与FF: background:orange; *background:blue; 区别IE6与IE7: background:green !import ...
- MarkdownPad2 在 Windows10 下 预览无法显示
Windows10下面一直报错,无法使用. 解决方法: 安装 Awesomium 1.6.6 SDK,如果还是有问题,请继续安装:Microsoft's DirectX End-User Runtim ...
- EPANET头文件解读系列5——TYPES.H
/************************************************************************ ...
- JQuery中绑定事件(bind())和移除事件(unbind())
有时候事件执行完了,想取消事件的效果可以通过一定的办法来处理.比如bind()(绑定事件)和unbind()(移除通过bind()方法添加的事件)方法来移除事件的效果. 比如下面的一个案例: 复制代码 ...
- openfalcon源码分析之transfer
本节内容 transfer功能 transfer接收数据来源 transfer数据去向 transfer的一致性hash transfer的一致性hash key的计算 transfer源码分析 2. ...
- window和Linux下Redis的安装及运行
Window篇 Redis的官方目前公开的版本分为三个类别Stable.Beta和Unstable.这些版本一般只是针对Linux.Unix内核的系统,虽然官方的不支持Window系统,但是微软开源 ...
- nginx 配置 getsimplecms 配置文件
getsimplecms的安装需要两个php类库,一个是dom操作,一个是gd library. 所以先安装这两个类库,重启php解释器. yum install php-xml; yum insta ...
- IE、Chrome、Firefox 三大浏览器对比
1. 代理 IE 浏览器设置代理位置在: [Internet 选项]⇒ [连接]选项卡 ⇒ [局域网设置],如下: Chrome 的代理配置界面完全同 IE,只是你设置路径在: [设置]⇒ [高级]⇒ ...