golang mod 包管理使用 引入本地包

2021-10-01 13:53:42 字數 2619 閱讀 8022

對於多個專案來說,把所有的原始碼都放在gopath下的src目錄下非常的不方便。golang給我們提供了乙個叫go mod的命令來脫離src目錄,方便我們管理go專案。

對於windows使用者來說,使用前在機器上必須成功安裝了git,因為需要從github上拉取專案依賴的**。

1.設定go111module屬性

在cmd中執行set go111module=on

2.生成mod檔案

給我們的專案生成.mod檔案,該檔案描述專案需要的依賴等

進入我的專案資料夾中,只有乙個檔案http-server.go

在該目錄下執行go mod init生成.mod檔案,檔名是生成的.mod檔案中第一行的名稱,可以為空,為空時預設和資料夾名稱一致。執行go mod init test,生成檔案:

此時已經成功生成了go.mod檔案,但是.mod檔案中並沒有任何的描述依賴。

3.編譯

該環境的go環境變數如下,gopath在c:\code\src下,按照以前的思路,除了gopath和goroot以外的目錄是無法編譯的,但是我們想在上一步中的目錄下直接編譯。

進入現有專案目錄中,執行go buildgo mod會自動拉取依賴項,如圖:

上面生成的.mod檔案中 v1.1.6為版本資訊,預設情況下使用的是最新的版本,如果包打過tag,那麼就會使用最新的那個tag對應的版本。

4.結論

上步重新在github上拉取了依賴檔案到gopath的pkg目錄下,從此不再必須將源**放在gopath下了。

編譯成功,生成了可執行程式。

如果想在你的模組如果想引入你本地其他地方的模組,可以嘗試通過 replace 指定目錄,而且前提是你的 article 也得 go 的乙個模組,而不是按 gopath 下的某個包來引入。

我簡答舉個例子吧,比如現在有兩個專案,分別是 blog 和 article,結果如下:

├─article

│ article.go

│ go.mod

│├─blog

│ go.mod

│ main.go

blog 是應用的入口,main 所在位置,而 article 可以理解為你寫的乙個公共的庫,其中提供了乙個函式 hello()。現在,要在 blog 中呼叫 article 中的 hello() 函式。

article 模組中的 go.mod 內容如下:

module article

go 1.13

article.go 內容如下:

package article

func hello() string

blog 模組中的 go.mod 內容如下:

此處的 replace 稍微介紹下,之所以要是 github.com/article 的格式,是因為在 go1.13 中, go module 名稱規範要求路徑的第一部分必須滿足網域名稱規範,否則可能匯報類似malformed module path "article": missing dot in first path element這樣的錯誤。當然,在 go1.12 不會有報這個錯誤。建議的話,如果是公司內部使用,可以替換成公司內部網域名稱。

replace 的第二個引數指定了不從遠端獲取,而是本地某個路徑下的模組替換 github.com/article。

main.go 的內容如下:

此時,在 blog 執行 go run main.go 是可以成功執行的。

Go包管理go mod使用

為了解決go包管理的問題,go從1.11開始加入了go modules這一新特性。讓包的依賴和版本管理更加容易。乙個module可以理解為乙個單獨的包或者模組,module的根目錄下會包含乙個go.mod檔案。go.mod檔案中定義了該module被其它包import的path,同時也包含了該mod...

scoop mysql 使用scoop包管理器

使用scoop包管理器 在linux,mac上都有對應的包管理器,在windows上也不例外,使用包管理器的優點是不用再到官網去找軟體,能夠一條命令就更新。再windows上的包管理器有choco和scoop,這裡我們使用scoop。首先安裝scoop,開啟powershell視窗,輸入以下命令 s...

python包管理 關於python包管理

有著41個物件 檔案或者資料夾 1 其中linester 1.0.0 py2.7.egg info檔案 是安裝mynester跟yournester的資訊總結,他們使用了python setup.py install 的安裝方式。學會使用distutils發布包,見文章 但是在linester 1....