GOPATH 深度解析

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

本篇部落格來自於
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/matrixcmd/mycmd的包。

(也就是頂級目錄不能和 $GOROOT 下面的目錄相同)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.