Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Go语言环境安装详细介绍

工具链介绍

go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo。官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式。gc工具链对操作系统和CPU类型的支持情况如下:
操作系统CPU类型备注
FreeBSD 8 or lateramd64, 386, armDebian GNU/kFreeBSD not supported; FreeBSD/ARM needs FreeBSD 10 or later
Linux 2.6.23 or later with glibcamd64, 386, armCentOS/RHEL 5.x not supported; no binary distribution for ARM yet
Mac OS X 10.6 or lateramd64, 386use the gcc** that comes with Xcode**
Windows XP or lateramd64, 386use MinGW gcc. No need for cygwin or msys.
对于其它操作系统或CPU类型,需要从源码编译gc工具链或使用gccgo。
  • 如果使用cgo,则需要安装gcc;
  • Xcode command tool是Xcode的一部分,它包含gcc编译器, 可以从Xcode的Componts->Downloads对话框中下载该tool。

安装

二进制安装

  1. 从官网下载二进制包如*go1.6.linux-amd64.tar.gz*
  2. 解压到/usr/local目录:$ tar -C /usr/local -xzf go$VERSION.$GOOS-$GOARCH.tar.gz
  3. 将/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
  • 否则,需要下载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`,如果安装到其它位置,则需要重新定义;
使用GOROOT_BOOTSTRAP变量指定Go工具链位置(如果位于$HOME/go1.4,则无需指定)后,可以执行源码中的bootstrap.bash脚本,生成支持$GOOS$GOARCH指定的目标操作系统和架构的新工具链:$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash该命令生成的工具链位于../../go-${GOOS}-${GOARCH}-bootstrap.目录,可以设置为变量GOROOT_BOOTSTRAP的值,用于后续编译源码;

编译最新的go源码

  1. 设置git代理:$ git config http.proxy http://user:passwd@host:port$ git config https.proxy https://user:passwd@host:port
  2. 设置go get代理$ export http_proxy=http://user:passwd@host:port
  3. 获取源代码:直接下载或者从git仓库clone。
    • 从官网下载$ wget https://golang.org/dl/go$VERSION.src.tar.gz$ tar -xzvf go$VERSION.$OS-$ARCH.tar.gz
  • 从git代码库clone:$ git clone https://go.googlesource.com/go #需FQ$ git clone https://github.com/golang/go.git$ cd go$ git checkout go1.6 #也可以切换到其它分支如master
  1. 编译源代码$ pwd/tmp/$ cd go/src$ ./all.bash#使用`GOROOT_BOOTSTRAP`指定的go 1.4版本以上的工具链来编译go源码...ALL TESTS PASSED---Installed Go for linux/amd64 in /tmp/goInstalled 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 -Fapi/AUTHORSbin/CONTRIBUTORSdoc/favicon.icoinclude/lib/LICENSEmisc/PATENTSpkg/READMErobots.txtsrc/test/VERSION$ ls /tmp/go/bin#源码包自带的二进制工具命令, 没有 godocgogofmt$ ls /tmp/go/pkg/tool/linux_amd64/addr2lineasmcgocompiledistdocfixlinknmobjdumppackpproftour 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中,即可使用。
  2. 移动 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 versiongo version go1.4 linux/amd64
  3. 安装额外的工具如godocvetcover(二进制发布版中包含这些工具,无需额外安装):一些Go工具位于go.tools仓库中,需要额外安装。$ #安装所有工具:$ go get golang.org/x/tools/cmd/... #...是通配符,参考: go help packages$ go get golang.org/x/tools/cmd/godoc #只安装godoc工具$ ls bin/ #多了godocgogodocgofmt$ ls pkg/tool/linux_amd64/ #多了vet,coveraddr2lineasmcgocompilecoverdistdocfixlinknmobjdumppackpproftourtracevetyaccgo 命令会将godoc安装到$GOROOT/bin或者$GOBIN,其它的go toolcovervet安装到$GOROOT/pkg/tool/$GOOS_$GOARCH。可以用go tool covergo tool vet命令来调用后面目录中的程序。

工具链测试

  1. 创建和设置GOPATH(非必须):$ mkdir -p $HOME/go/{src,bin,pkg}$ export GOPATH=$HOME/go$ mkdir $HOME/go/src/demo$ cd !$
  2. 编写一个测试文件如 hello.gopackage mainimport "fmt"func main() {fmt.Printf("hello, world ")}
  3. 编译并执行, -x选项可以打印出编译过程$ go build -x demo.goWORK=/tmp/go-build333633893mkdir -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.gocd ./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.amv $WORK/command-line-arguments/_obj/exe/a.out demohello, world

环境变量(可选)

编译工具链可以使用以下环境变量进行配置;
  • $GOROOT
    构建时,值为all.bash脚本所在目录的父目录,会被写入到生成的二进制中;如果后续移动了安装目录,则使用该变量指定新的Go Tree顶层目录;
  • $GOROOT_FINAL
    一般和$GOROOT一致,定义在构建后的安装阶段安装到的位置;
  • $GOOS$GOARCH
    交叉编译时,分别定义目标操作系统和体系结构,默认和$GOHOSTOS$GOHOSTARCH一致。各组合如下:$GOOS $GOARCHAndroid armdarwin386darwinamd64darwinarmdarwinarm64dragonfly amd64freebsd 386freebsd amd64freebsd armlinux 386linux amd64linux armlinux arm64linux ppc64linux ppc64lelinux mips64linux mips64lenetbsd386netbsdamd64netbsdarmopenbsd 386openbsd amd64openbsd armplan9 386plan9 amd64solaris amd64windows 386windows amd64$ #交叉编译$ GOOS=windows GOARCH=amd64 go build$ file pssh.exepssh.exe: PE32+ executable for MS Windows (console) Mono/.Net assembly
  • $GOHOSTOS$GOHOSTARCH
    编译工具链所在主机的操作系统和架构类型,必须与所在操作系统和CPU架构类型兼容;
  • $GOBIN
    如果设置,则所有的Go二进制程序将安装到此目录,而不是默认的$GOPATH/bin

参考

    1. Getting Started
    2. Installing Go from source
本文永久更新链接地址