這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在最近的 weekly 版本中,golang 已經將大多數操作整合到了 go 這一個工具。並且環境變數的設定也發生了變化。不過蛋疼的是,如果不理解 GOPATH 的真正用法,只會讓你蛋碎一地。
最常見的錯誤:
can't load package: .: path "/pla/pla/pla" not inside a GOPATH
這篇文章,簡短、清晰的解釋了新的 go 環境應當如何設定。
作者 Frank Müller,原文在此:http://mue.tideland.biz/2012/02/go-environment-setup.html?spref=tw
—————-翻譯分隔線—————-
Go 環境設定
對於 Go 環境來說,最好的開始就是設定一個所有目錄存放的根目錄,例如 /home/themue/projects。它將是 Go SDK、第三方包和自有項目的家目錄。當前的 weekly 版本可使用命令將 Go 安裝到 hg clone -u weekly https://code.google.com/p/go 安裝到 go 目錄。 文檔 http://weekly.golang.org/doc/install.html 對此逐一進行了詳述。另外兩個目錄只能手工建立,別且都分別建立 src 和 pkg 子目錄。這樣就得到了如下結構
/home/themue/projects /go /bin ... /test /own /pkg /src /3rdparty /pkg /src
為什麼有第三方目錄?新的 Go 工具採用非常智能的方式將外部包安裝在不同的目錄中。這是基於環境變數 $GOPATH 的。名字已經說明這是一個路徑,而不僅僅是一個目錄。go build 和 go install 利用 $GOPATH 尋找軟體需要編譯和連結的關聯包。必須先安裝外部包才能使用。命令 go get 將會在路徑的第一個目錄中安裝原始碼並且編譯包。因此上面例子中,順序應當為
GOPATH=$HOME/projects/3rdparty:$HOME/projects/own
當原始碼安裝位於 …/own/src 的自有包時,它將會被安裝在 …/own/pkg 中。
還有哪個環境變數是必須的?一個是 $GOROOT。它指向了 Go SDK 的根目錄,這裡是 /home/themue/projects/go。編譯後的可執行檔將會安裝在 $GOROOT/bin。不過對於 SDK 會有兩個選擇進行接下來的設定:
- 二進位檔案存放的位置沒有問題。標準的 $PATH 將指向這一目錄,像這樣 PATH=$PATH:$HOME/projects/go/bin.
- 另一個辦法就是弄一個存放所有個人可執行檔和指令碼的目錄 $HOME/bin,並且將它設定在 $PATH 中。這樣就可以在安裝 Go 之前設定 GOBIN=$HOME/bin。那麼編譯的 Go 執行檔案就會安裝在 $HOME/bin 中。
在你自己的原始碼目錄裡,可能會需要為了不同的項目用到更多的子目錄。它們命名方式可能依賴於你使用的其他軟體組態管理環境。我的是 code.google.com。因此對於 Tideland Common Go Library(訪問 http://code.google.com/p/tcgl)我將代碼放在
…/own/src/code.google.com/p/tcgl。這個項目包含了若干個包,無論是否在同一個項目中,都可以通過 code.google.com/p/tcgl/foo 的方式匯入。更重要的是,使用My Code的人可以更加容易的瞭解到如何將其作為第三方包擷取和匯入。