Linux上go的安裝配置以及簡單使用
阿新 • • 發佈:2018-12-31
安裝go工具
在 http://golang.org/dl/下載最新的linux版本,並把它提取到/usr/local目錄,在此目錄下進行解壓縮
$ tar -xvf xxx.tar.gz
然後將/usr/local/go/bin新增到PATH環境變數中,執行
$ export PATH=$PATH:/usr/local/go/bin
實際上go會預設假定它被安裝到/usr/local/go目錄下,但也可以將go安裝到其他位置,此時必須設定GOROOT環境變數來指出它所安裝的位置。
例如將go安裝到你的home目錄下,你應當將以下命令新增到$HOME/.profile檔案中
$ export GOROOT=$HOME/go $ export PATH=$PATH:$GOROOT/bin
執行go version,看到go的安裝版本即安裝成功
你的第一個程式
GOPATH環境變數
GOPATH環境變數指定了你的工作空間位置
首先建立一個工作目錄,並設定相應的GOPATH,工作目錄可以放在任何地方,但不能和go的安裝目錄相同,在這我們使用$HOME/work
$ mkdir $HOME/work
$ export GOPATH=$HOME/work
注意:go的程式碼必須放在工作空間內,也就是我們這裡的work目錄下,其中包含了三個子目錄
bin目錄包含可執行命令
pkg目錄包含包物件
src目錄包含go的原始檔,它們被組織成包(每個目錄都對應一個包)
接下來將工作空間的bin子目錄新增到PATH中:
$ export PATH=$PATH:$GOPATH/bin包路徑
標準庫中的包有給定的短路徑比如"fmt",對於你自己的包,也必須選擇一個基本路徑,來保證它不會與將來新增到標準庫或其他標準庫中的包相沖突。
使用packs作為基本路徑,在你的工作空間裡建立一個目錄,我們將原始碼放在其中:
$ mkdir $GOPATH/src/packs
你的第一個程式
要編譯執行簡單的程式,首先要選擇包路徑,在這裡我們使用packs/hello,並在你的工作空間內建立相應的包目錄
$ mkdir $GOPATH/src/packs/hello
接著在該目錄中建立名為hello.go的檔案,其內容如下package main import "fmt" func main() { fmt.Printf("Hello, world.\n") }
現在可以使用go工具構建並安裝此程式了
$ go install packs/hello
注意,你可以在系統的任何地方執行此命令。go工具會根據GOPATH指定的工作空間,在packs/hello包內查詢原始碼。
如果從包目錄中執行go install,也可以省略包路徑:
$ cd $GOPATH/src/packs/hello
$ go install
此命令會構建hello命令,產生一個可執行的二進位制檔案。並存放在工作空間的bin目錄下,在這裡就是$GOPATH/bin目錄下
因為已經將$GOPATH/bin新增到PATH中,只需要輸入該二進位制檔名執行即可
$ hello
Hello, world.
你的第一個庫
讓我們編寫一個庫,並讓hello程式使用它。
同樣,第一步韓式選擇包路徑(在這裡使用packs/stringutil)並建立包目錄:
$ mkdir $GOPATH/src/packs/stringutil
接著,在該目錄中建立名為reverse.go的檔案,內容如下:
// stringutil 包含有用於處理字串的工具函式。
package stringutil
// Reverse 將其實參字串以符文為單位左右反轉。
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
然後使用go build命令來測試該包的編譯:
$ go build packs/stringutil
即可,這不會產生輸出檔案,想要輸出的話,必須使用go install命令,它會將包的物件放到工作空間的pkg目錄中。
接下來修改原來的hello.go檔案
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
}
然後通過
$ go install packs/hello
來安裝hello程式,再執行此程式的新版本,應該能看到一條新的,反向的資訊:
$ hello
Hello, Go!