傻瓜式的go modules的讲解和代码

Posted ydymz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了傻瓜式的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是一个单数啊。。。module和go mudules。。。我该如何理解啊。。。模板我倒是知道。。。总感觉这个怪不到谷歌头上,而且这玩意大家试个两下,就能找到正确理解也不算什么事。而且我要是把自己的代码都丢到github上同样不会报错,只是我是想着不丢到github上面的使用所以进了歪路。而且看后面的语法解析 go mod download 看起来就像是能实现我说的效果的,就是国内没什么材料,我只好一个一个翻英文,,,

而第二句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的讲解和代码的主要内容,如果未能解决你的问题,请参考以下文章

Go语言安装

Go语言安装

GO go modules 的 go mod

Prism 源码解读3-Modules加载

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

go module 使用