一
国内关于gomod的文章,哪怕是使用了百度 -csdn,依然全是理论,虽然golang的使用者大多是大神但是也有像我这样的的弱鸡是不是?
所以,我就写个傻瓜式教程了。
github地址:https://github.com/247292980/go_moudules_demo
代码很少很简单。。。。
二
1.新建文件夹 go_moudules_demo
2.go mod之,生成go.mod文件
go mod init go_moudules_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,他只管一个项目里的多个包。
为什么造成这个误区呢?因为国内说的都是包管理,我还真以为是针对包的操作,然后第一次尝试失败后,翻了下官网
1 |
|
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,下载没download的package 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 查看当前的依赖和版本信息
来源:https://www.cnblogs.com/ydymz/p/9788804.html
有疑问加站长微信联系(非本文作者)