GOPATH與工作空間

2021-10-06 18:01:51 字數 3509 閱讀 9625

前面我們在安裝go的時候看到需要設定gopath變數,go從1.1版本到1.7必須設定這個變數,而且不能和go的安裝目錄一樣,這個目錄用來存放go原始碼,go的可執行檔案,以及相應的編譯之後的包檔案。所以這個目錄下面有三個子目錄:src、bin、pkg

從go 1.8開始,gopath環境變數現在有乙個預設值,如果它沒有被設定。 它在unix上預設為$home/go,在windows上預設為%userprofile%/go。

go 命令依賴乙個重要的環境變數:$gopath

windows系統中環境變數的形式為%gopath%,本書主要使用unix形式,windows使用者請自行替換。

(注:這個不是go安裝目錄。下面以筆者的工作目錄為示例,如果你想不一樣請把gopath替換成你的工作目錄。)

在類 unix 環境下大概這樣設定:

為了方便,應該新建以上資料夾,並且上一行加入到.bashrc或者.zshrc或者自己的sh的配置檔案中。

windows 設定如下,新建乙個環境變數名稱叫做gopath:

gopath=c:\mygo
gopath允許多個目錄,當有多個目錄時,請注意分隔符,多個目錄的時候windows是分號,linux系統是冒號,當有多個gopath時,缺省會將go get的內容放在第乙個目錄下。

以上 $gopath 目錄約定有三個子目錄:

以後我所有的例子都是以mygo作為我的gopath目錄

gopath下的src目錄就是接下來開發程式的主要目錄,所有的原始碼都是放在這個目錄下面,那麼一般我們的做法就是乙個目錄乙個專案,例如: $gopath/src/mymath 表示mymath這個應用包或者可執行應用,這個根據package是main還是其他來決定,main的話就是可執行應用,其他的話就是應用包,這個會在後續詳細介紹package。

所以當新建應用或者乙個**包時都是在src目錄下新建乙個資料夾,資料夾名稱一般是**包名稱,當然也允許多級目錄,例如在src下面新建了目錄$gopath/src/github.com/astaxie/beedb 那麼這個包路徑就是"github.com/astaxie/beedb",包名稱是最後乙個目錄beedb

下面我就以mymath為例來講述如何編寫應用包,執行如下**

cd $gopath/src

mkdir mymath

新建檔案sqrt.go,內容如下

// $gopath/src/mymath/sqrt.go原始碼如下:

package mymath

func sqrt(x float64) float64

return z

}

這樣我的應用包目錄和**已經新建完畢,注意:一般建議package的名稱和目錄名保持一致

上面我們已經建立了自己的應用包,如何進行編譯安裝呢?有兩種方式可以進行安裝

1、只要進入對應的應用包目錄,然後執行go install,就可以安裝了

2、在任意的目錄執行如下**go install mymath

安裝完之後,我們可以進入如下目錄

cd $gopath/pkg/$_$

//可以看到如下檔案

mymath.a

這個.a檔案是應用包,那麼我們如何進行呼叫呢?

接下來我們新建乙個應用程式來呼叫這個應用包

cd $gopath/src

vim main.go

package main

import (

"mymath"

"fmt"

)func main()

可以看到這個的package是main,import裡面呼叫的包是mymath中尋找。

如何編譯程式呢?進入該應用目錄,然後執行go build

輸出如下內容

hello, world.  sqrt(2) = 1.414213562373095

也是輸出如下內容

hello, world.  sqrt(2) = 1.414213562373095
這裡我們展示如何編譯和安裝乙個可執行的應用,以及如何設計我們的目錄結構。

go語言有乙個獲取遠端包的工具就是go get,目前go get支援多數開源社群(例如:github、googlecode、bitbucket、launchpad)

go get github.com/astaxie/beedb
go get -u 引數可以自動更新包,而且當go get的時候會自動獲取該包依賴的其他第三方包

通過這個命令可以獲取相應的原始碼,對應的開源平台採用不同的原始碼控制工具,例如github採用git、googlecode採用hg,所以要想獲取這些原始碼,必須先安裝相應的原始碼控制工具

通過上面獲取的**在我們本地的原始碼相應的**結構如下

$gopath

src|--github.com

|-astaxie

|-beedb

pkg|--相應平台

|-github.com

|--astaxie

|beedb.a

go get本質上可以理解為首先第一步是通過原始碼工具clone**到src下面,然後執行go install

在**中如何使用遠端包,很簡單的就是和使用本地包一樣,只要在開頭import相應的路徑就可以

import "github.com/astaxie/beedb"
通過上面建立的我本地的mygo的目錄結構如下所示

bin/

pkg/

平台名/ 如:darwin_amd64、linux_amd64

util.go

從上面的結構我們可以很清晰的看到,bin目錄下面存的是編譯之後可執行的檔案,pkg下面存放的是應用包,src下面儲存的是應用源**

go語言的工作空間和GOPATH環境變數

go語言並沒有強制一定要使用一定的工作空間和專案結構,對於小型的go程式依靠go run等命令就可以直接編譯執行。然而,保持良好的工作空間和檔案結構,對於管理源 和發布程式都是非常有幫助的。對於大型的go語言專案,工作空間則是一定要的。go語言的工作空間其實就是乙個檔案目錄,目錄中必須包含src p...

go語言的工作空間和GOPATH環境變數介紹

go語言並沒有強制一定要使用一定的工作空間和專案結構,對於小型的go程式依靠go run等命令就可以直接編譯執行。然而,保持良好的工作空間和檔案結構,對於管理源 和發布程式都是非常有幫助的。對於大型的go語言專案,工作空間則是一定要的。1 go語言的工作空間結構 go語言的工作空間其實就是乙個檔案目...

Go 筆記一 工作區和GOPATH

包中可以任意個.go 副檔名的原始碼檔案,需要被宣告為屬於同乙個 包。包的名稱一般會與這些原始碼檔案所在的目錄同名。如果不同名,那麼在構建 安裝的過程中會以 包名稱為準。每個 包都會有匯入路徑。包的匯入路徑是其他 在使用該包中的程式實體時需要引入的路徑。在實際使用程式實體之前,我們必須先導入其所在的...