go mod位置和自定义包引入问题

摘要:
许多人对mod的使用并不那么清楚。今天,有人刚刚问了我这个问题,让我们来讨论一下。如果在使用过程中有包更改,您可以使用其他命令来帮助,例如gomodadjy,来组织您的包目录。以我为例。根目录是stbweb。如果启动项common中引用了其他包,我可以直接在stbwb目录下执行gomodinitstbweb。

对于mod使用好多人不是那么清楚,今天刚好有人问我这个问题,就把这个事情说一下子。
首先说一下基本使用,想看标题问题的略过看结尾的二部分

mod使用

准备事项,两个环境变量,如图

 
go mod位置和自定义包引入问题第1张
image.png

1.开始使用,命令

go mod init 你的项目名称

example : go mod init myproject

执行该命令后,执行的目录下面就会出现一个go.mod文件

2.开始写入使用包,直接执行构建语句,就是go build,然会进行下载对应的包

 
go mod位置和自定义包引入问题第2张
image.png

执行完毕后就会文件会出现你使用的一些包,还会出现一个go.sum的文件,记录了你的版本过程


 
go mod位置和自定义包引入问题第3张
image.png

至此,已经是可以运行了,不过还可以将对应包下载保存

3.本地保存使用包,命令

go mod vendor

执行该命令后,会出现一个vendor文件夹,里面就是你引用的所有包,由此就可以看出,使用mod后,已经不用依赖于原始的gopath,灵活性更高了。

如果使用过程中有包的变动等,可以使用其他命令辅助,比如go mod tidy,整理你的包目录。

go mod命令(详细信息请移步官方,这里简略说一下)

download:download modules to local cache (下载依赖的module到本地cache))

edit :edit go.mod from tools or scripts (编辑go.mod文件)

graph : print module requirement graph (打印模块依赖图))

init :initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件))

tidy : add missing and remove unused modules (增加丢失的module,去掉未用的module)

vendor :make vendored copy of dependencies (将依赖复制到vendor下)

verify : verify dependencies have expected content (校验依赖)

why : explain why packages or modules are needed (解释为什么需要依赖)

问题分析

1.目录中有自己的定义包怎么办,出现以下问题,说你的包不在goroot中,就是i说找不到

main.go:4:2: package xx/xx is not in GOROOT (C:Gosrcxx)
main.go:5:2: package xx/xx is not in GOROOT (C:Gosrcxx)

问题解决:

该问题就是构建mod的路径不对,以我当前的这个项目为例


 
go mod位置和自定义包引入问题第4张
image.png

common文件夹里面是项目启动main,如果在这里构建mod,然后,这个启动项里面引用了其他几个包(上一级的core,lib,loader等),这时候,就会找不到这些包

解决办法:

在项目根目录下面构建mod包,这些引用的包都在该目录下,这样就没有问题了。以我这里为例,根目录是stbweb,启动项common中引用了其他包,我就直接在stbwb(项目运行根目录)目录下执行go mod init stbweb即可。然后再进入启动main函数目录去执行go build,自然就好了

 
go mod位置和自定义包引入问题第5张


作者:哆啦在这A梦在哪
链接:https://www.jianshu.com/p/dd58da3100d7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

免责声明:文章转载自《go mod位置和自定义包引入问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Halcon 单相机标定+消除径向畸变ADO.NET 从DataTable中获取某列含有的不重复值的几种方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

IntelliJ idea设置显示错误代码提示

idea默认关闭自动编译,所以一些编译错误只有在编译的时候才会提示,例如修改了引用类。按图中设置打开自动编译:注意:idea默认打开省电模式,自动编译在省电模式下被禁用,所以需要在file˃powersavemode关闭省电模式。...

安装pygame

在python3中安装pygame库。一段时间后,您可以看到安装成功,并且可以导入pygame...

electron用默认浏览器打开链接的3种实现方式

在使用Electron开发桌面程序的过程中,我们可能经常需要使Electron程序中包含的链接在单击后直接调用系统的默认浏览器打开。仔细阅读文档后,我们都知道它的核心原理是调用系统的默认浏览器,通过Electron shell模块中的openExternal方法打开链接。然而,它的实现有不同的方法,彻底接管和选择性接管。介绍第3章中的有效方法。以上三种方法都...

Java注解

Java注解注解实际就是一种元数据为程序元素设置元数据并且可以对程序执行没有影响。目前Java有5个元注解,他们是:Retention描述注解被保留的时间长短,有三个取值分别是:RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME如果我们想要通过反射获取注解那么应该使用Ret...

实用小技巧:在键盘没有小键盘时怎么打开任务管理器

原创:转载请注明出处!我需要为我的工作买一个87键的机械键盘。当我打开任务管理器打开时,我经常使用Ctrl+Alt+;现在不行了。有几种方法可以打开任务管理器以查看当前任务状态:1.Ctrl+Alt+Delete,这与之前的Ctrl+Alt+Delete相同,效果相同;2.Ctrl+Shift+Esc也可以调出任务管理器;3.右键单击任务栏的空白区域,然后从...

VBS以管理员身份运行自身

有一项工作任务。它执行一个vbs脚本,这是纯vbs脚本并且不涉及批处理,因此vbs在执行过程中具有管理员权限,可以执行只能由管理员执行的操作。...