如果你還在使用 GOPATH 模式來開發Golang程式,那麼你可以參考本文來告别 GOPATH,并帶給你一個友善的包管理工具。
關于 go mod 的說明和簡單使用,可以參考:
1、Go1.1.1新功能module的介紹及使用
2、Introduction to Go Modules
3、Go 1.11 Modules 官方說明文檔
使用go mod 管理項目,就不需要非得把項目放到GOPATH指定目錄下,你可以在你磁盤的任何位置建立一個項目,比如:
建立一個名為 wserver 的項目,項目路徑 D:\test\wserver (注意,該路徑并不在GOPATH裡)
進入項目目錄 D:\test\wserver 裡,建立一個 go源碼檔案: main.go
然後在 D:\test\wserver 裡打開終端執行指令: go mod init wserver (go mod init 後面需要跟一個名字,我這裡叫wserver)
看到提示 “go: creating new go.mod: module wserver” 說明 go mod 初始化成功了,會在目前目錄下生成一個 go.mod 檔案。
包含go.mod檔案的目錄也被稱為子產品根,也就是說,go.mod 檔案的出現定義了它所在的目錄為一個子產品。
執行上述指令之後,其實你已經可以開發編譯運作此項目了,比如我們随便使用github上的一個包,在終端列印一下
運作一下,會看到輸出結果: { false false false} ,同時項目目錄下多出了一個檔案 go.sum 。go.sum 是記錄所依賴的項目的版本的鎖定。
現在我們再建一個項目内的包 route :
在 main.go 裡如果需要使用這個包,需要使用這個包的 子產品内的絕對路徑來導入,比如:
"wserver/route" 導入這個包的地方是 子產品内的絕對路徑,就是要從go.mod所在的目錄開始。
另外,如果我們想把這個項目放到GOPATH下面,不使用go mod模式,而是想使用GOPATH模式的話,,隻需要把這個項目移到GOPATH環境變量包含的任意一個目錄下面的src目錄裡,就可以啟用GOPATH模式了(前提是 GO111MODULE 這個環境變量的值必須是auto 或 off)。
比如:gotest 目錄是GOPATH環境變量裡的其中一個目錄,我們将上面的代碼複制到 src 目錄下,删除原來的go.mod 、go.sum 兩個檔案(也可以不删除),代碼一樣可以運作: