首頁 > 軟體

Go語言環境安裝詳細介紹

2020-06-16 17:30:24

工具鏈介紹

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。

安裝

二進位制安裝

  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/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, worldn")
    }
    
  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

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-10/135948.htm


IT145.com E-mail:sddin#qq.com