傻瓜式的go modules的講解和代碼
一
國內關於gomod的文章,哪怕是使用了百度 -csdn,依然全是理論,雖然golang的使用者大多是大神但是也有像我這樣的的弱雞是不是?
所以,我就寫個傻瓜式教程了。
github地址:https://github.com/247292980/go_moudules_demo
代碼很少很簡單。。。。
二
1.新建文件夾 go_moudiules_demo
2.go mod之,生成gomod.go文件
go mod init go_moudiules_demo
語法
go mod init [module]
3.創建main.go,默認包名是gomod,需要改成main
4.創建正真的存放代碼的文件夾 demo和文件gomod.go,註意不能與main放在同一文件夾下,因為會造成包名沖突
5.根據規則引入代碼,這裏有個坑,因為goland做的不太好,實際上golang的所有工具都做的不太好,導致代碼報紅,但是實際上go build/run還是能跑通的
當然goland也可以配置,就是不知道怎麽去紅名。。。
三 總結
gomod最容易讓人進了誤區就是,把自己之前的代碼都gomod一次,那麽後面使用的時候直接根據gomod的package找之前的代碼,簡直美滋滋。
畢竟是go moudules但是,實際上只是go moudule,他只管一個項目裏的多個包。
為什麽造成這個誤區呢?因為國內說的都是包管理,我還真以為是針對包的操作,然後第一次嘗試失敗後,翻了下官網
A module is a collection of related Go packages.
Modules are the unit of source code interchange and versioning.
The go command has direct support for working with modules, including recording and resolving dependencies on other modules.
Modules replace the old GOPATH-based approach to specifying which source files are used in a given build.
a collection of related Go packages. 相關Go包的集合,這玩意的理解真的是難,什麽相關,相關的是什麽?這時候根據官網的usage代碼反向理解下
go mod init [module]
,顯然是
module的相關Go包的集合,而module是一個單數啊。。。
和go mudules。。。我該如何理解啊。。。模板我倒是知道。。。總感覺這個怪不到谷歌頭上,而且這玩意大家試個兩下,就能找到正確理解也不算什麽事。而且我要是把自己的代碼都丟到github上同樣不會報錯,只是我是想著不丟到github上面的使用所以進了歪路。而且看後面的語法解析 go mod download 看起來就像是能實現我說的效果的,就是國內沒什麽材料,我只好一個一個翻英文,,,module
而第二句Modules are the unit of source code interchange and versioning. Modules 是源碼的版本控制和交換的單位,也就說明go mod之間是獨立的,,,不能互調,除非在gopath裏面。感覺大神看到這句兩下都不用試了。。。
四 語法解析
主要是一個人的博客 http://blog.51cto.com/qiangmzsx/2164520?source=dra
我把其中的關鍵抽出來,去掉他的代碼,有興趣的可以去原文看看
go mod init:初始化modules go mod download:下載modules到本地cache go mod edit:編輯go.mod文件,選項有-json、-require和-exclude,可以使用幫助go help mod edit go mod graph:以文本模式打印模塊需求圖 go mod tidy:刪除錯誤或者不使用的modules go mod vendor:生成vendor目錄 go mod verify:驗證依賴是否正確 go mod why:查找依賴 go test 執行一下,自動導包 go list -m 主模塊的打印路徑 go list -m -f={{.Dir}} print主模塊的根目錄 go list -m all 查看當前的依賴和版本信息
傻瓜式的go modules的講解和代碼