這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
本篇部落格來自於
Go語言介紹
golang官方1
golang官方2
GOPATH 是golang 中的一個環境變數,瞭解它對瞭解整個golang項目的組織方式很有協助,同時很多go 命令也會預設用到 GOPATH,所以必須牢固掌握。
原文如下:
The GOPATH environment variable is used to specify directories outside of $GOROOT that contains the source for Go progects and theire binaries.
介紹:
GOPATH 環境變數是用來指定GOROOT之外的,包含項目的源檔案和他們的二進位檔案的目錄。
也就是說:你的項目的原始碼檔案(.go檔案) 和 二進位檔案(:package 和 可執行檔) 都會放在GOPATH下面。 因為整個工程鬥放在$GOPATH下面,所以 go 工具(比如 go install) 將會對GOPATH 下面的內容進行尋找。比如 二進位的目的地,搜尋 imports 的地址。
GOPATH 是一個 路徑列表,指定的多個目錄由 “:” 分隔,(OS X 或者Linux)或者 “;”分隔(Windows上面)。
當多個目錄列出的時候, go install 或者 “go 工具” 以外的任何地方使用,第一個目錄作為安裝目錄。 當在GOPATH的路徑列表內使用這兩種工具的時候,包含目錄作為安裝目錄。(這個在下文中的例子中會存在)
對於本文檔的大部分內容, $GOPATH 表示 指向路徑列表中當前活動的第一個。
設定GOROOT(使用全域設定,在/etc/..中)
export GOROOT=/usr/local/go
export PATH=$PATH: $GOROOT/bin
使其生效
source /etc/profile
編輯目前使用者的環境變數
vim ~/.bashrc
設定 GOPOAH
export GOPATH=$HOME/p/ext:$HOME/p/dev
是其生效
source ~/.bashrc
此處設定了 GOPATH 為兩個目錄(一個用於存放第三方包,一個使用者開發),如果使用 go 工具
進行第三方包的安裝
go get code.google.com/p/go-tour/gotour
預設會安裝到第一個目錄 ($HOME/p/ext
)
如果在$HOME/p/dev
中寫代碼,使用 go工具(go install
, go build
) 會將二進位包安裝到 $HOME/p/dev
中。
整合 GOPATH
在 OS X 或者 Linux中,加入下面的運算式到 PATH中,將會加入所有的 $GOPATH/bin
目錄。
$(GOPATH//://bin:)/bin
添加如下語句到 標準 Go makefile中 將引入所有的 $GOPATH 的pkg 目錄
`GOPATHSEP=:ifeq ($(GOHOSTOS),windows)GOPATHSEP=;endifGCIMPORTS+=-I $(subst $(GOPATHSEP),/pkg/$(GOOS)_$(GOARCH) -I , $(GOPATH))/pkg/$(GOOS)_$(GOARCH)LDIMPORTS+=-L $(subst $(GOPATHSEP),/pkg/$(GOOS)_$(GOARCH) -L , $(GOPATH))/pkg/$(GOOS)_$(GOARCH)
目錄布局
匯入 目錄為 x/y/z的包的源檔案在目錄 (注意匯入的包的名稱)
$GOPATH/src/x/y/z
匯入目錄為 x/y/z的包的二進位檔案在 (注意產生的 包的名稱 )
$GOPATH/pkg/x/y/z.a
源檔案位於 $GOPATH/src/A/B
的 命令 的二進位檔案在 (注意產生的命令的名稱)
$GOPATH/bin/B
倉庫整合 和 建立 go install
項目
go install
,當擷取一個包,根據包的匯入路徑如發現URL。如果嘗試
go install code.google.com/p/gomatrix/matrix
go install
將從 http://code.google.com/p/gomatrix 取得原始碼,並且將它複製到倉庫
$GOPATH/src/code.google.com/p/gomatrix
若你想在你的自己的代碼倉庫中 “import a package” 你需要使用這個package的 “full import path”。也就是說,如果你想匯入 “matrix” 這個包,你需要
import "code.google.com/p/gomatrix/matrix"
而不是
import "matrix"
(需要使用全名)
技巧和竅門
第三方包
GOPATH設定兩個目錄很有用。第一個目錄作為第三方包的存放位置,第二個目錄作為你自己的項目。 將第三方的GOPATH放置到第一位,這樣子 go install 將使用它作為預設的位置。 然後你可以在第二個 GOPATH目錄下工作,並且可以使用 go 命令
(在第二個GOPATH西面使用 go 命令), go install
等。
舉例:
上例中設定的 兩個目錄中,目錄結構如下:
.
--p
|--ext
| |--bin # 命令目錄
| |--pkg # 包目錄
| |
–linux_amd64
| | --github.com
|
–src # 源碼目錄
| --github.com
|
–… # 源碼子目錄
--dev
|--bin
|--pkg
–src
FAQ
為什麼 $GOPATH/src/cmd/mycmd/*.go
沒有編譯?
當使用 go 命令 搜素包的時候,它總是首先搜尋 $GOROOT
。 $GOROOT
中包含目錄,當它在 $GOROOT
中找到一個 cmd/
目錄的時候 它不會繼續尋找 any of the GOPATH directories.
這樣可以防止你 定義你自己的 math/matrix
和 cmd/mycmd
的包。
(也就是頂級目錄不能和 $GOROOT
下面的目錄相同)。