Go语言环境安装详细介绍

工具链介绍

go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo。linux

官方为gc工具链提供了二进制安装包和源码, 能够根据须要选择一种安装方式。gc工具链对操做系统和CPU类型的支持状况以下:android

操做系统 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。git

  • 若是使用cgo,则须要安装gcc;
  • Xcode command tool是Xcode的一部分,它包含gcc编译器, 能够从Xcode的Componts->Downloads对话框中下载该tool。

安装

二进制安装

  1. 官网下载二进制包如*go1.6.linux-amd64.tar.gz*
  2. 解压到/usr/local目录:github

    $ tar -C /usr/local -xzf go$VERSION.$GOOS-$GOARCH.tar.gz 
  3. 将/usr/local/go/bin添加到PATH中:golang

    $ export PATH=$PATH:/usr/local/go/bin 

go默认假设被安装到/usr/loca/go,若是被安装到其它位置,则须要设置GOROOT环境变量。例如,二进制包被解压到$HOME目录,则设置以下:bootstrap

$ export GOROOT=$HOME/go $ export PATH=$PATH:$GOROOT/bin 

注意:只有当将go安装到非/usr/local目录时才须要设置GOROOT变量。windows

从源码编译安装

安装Go编译器二进制文件

1.4版本后的Go工具链是用go语言写的,若是要构建它,系统须要安装Go编译器:api

  • 若是系统已经有>= 1.4版本的go工具链,则将GOROOT_BOOTSTRAP变量设置为所在目录;bash

    $ 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/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中,便可使用。

  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 version go 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/ #多了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 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.go

    package main
    
    import "fmt"
    
    func main() { fmt.Printf("hello, world\n") } 
  3. 编译并执行, -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 

环境变量(可选)

编译工具链能够使用如下环境变量进行配置;

  • $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 
  • $GOHOSTOS$GOHOSTARCH
    编译工具链所在主机的操做系统和架构类型,必须与所在操做系统和CPU架构类型兼容;

  • $GOBIN
    若是设置,则全部的Go二进制程序将安装到此目录,而不是默认的$GOPATH/bin

参考

    1. Getting Started
    2. Installing Go from source
相关文章
相关标签/搜索