ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-03-17 07:32:07  阅读:235  来源: 互联网

标签:vendor 自定义 init module xx go mod


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

mod使用

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

  image.png

 

1.开始使用,命令

go mod init 你的项目名称

example : go mod init myproject

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

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

  image.png

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


  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:\Go\src\xx)
main.go:5:2: package xx/xx is not in GOROOT (C:\Go\src\xx)

问题解决:

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


  image.png

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

解决办法:

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

 

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

标签:vendor,自定义,init,module,xx,go,mod
来源: https://www.cnblogs.com/jasonLiu2018/p/14547110.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有