本文的主题是如何导入自定义包,在说如何导入自定义包的之前,我们先看一下项目中go.mod文件中的内容:
1 |
|
require
关键字后面的都是项目的依赖,依赖规则由两个部分组成,前面一部分是包路径,后面一部分表示的是版本号。你会发现有两种版本号,一种是我们很熟悉的git标签,比如v1.9.0,另一种就比较复杂一些,它是:版本号 + 时间戳 + hash比如:v0.0.0-20220715151400-c0bba94af5f8,它其实是
精准的对应着master分支上的一个git log记录,后面的哈希是git log哈希的前 12 位。
git 提交记录如下:
1 | E:\workGo\server-framework>git log |
最近的一次提交的hash值是:fc98374a19d430838fa7ea5d36de398df4fbd585,前12位是fc98374a19d4
和项目中的依赖是一致的
1 | require ( |
好了,我们就不说其他的了,我们来说一说如何实现导入自定义包的方式。文章中涉及的项目如下:
- 依赖包为server-framework,
go.mod
文件中的内容如下:
1 | module gitee.com/ydstudiox/server-framework |
- 使用依赖包的项目game-server,
go.mod
文件中的内容如下:
1 | module gitee.com/ydstudiox/game-server |
两个项目同时在GOPATH目录下
按包名导入
使用 replace
命令,形式为:项目所在目录名/package名=> 绝对路径||相对路径/package名,然后执行go mod tidy
即可
“相对路径”这个指的是server-framework相对项目game-server的路径,具体示例如下:
相对路径
1 | require gitee.com/ydstudiox/server-framework v0.0.0-20221015103549-fc98374a19d4 |
这样也行
1 | require gitee.com/ydstudiox/server-framework v0.0.0-20221015103549-fc98374a19d4 |
这样也行
1 | require gitee.com/ydstudiox/server-framework v0.0.0-20221015103549-fc98374a19d4 |
其实无论是绝对路径还是相对路径,只要能让程序找到被依赖的代码就行
按路径导入
按照包名导入的方式和其几种变种都可以实现导入自定义包的需求,但是有一个问题就是导入的依赖跟git仓库有了依赖,要是本地调试时依赖库的代码有更新就必须提交到git,使用依赖库的项目就需要删掉require项,然后执行go mod tidy
才能来到最新的代码。要是两者都是在本机的GOPATH目录下,这样做就有点不方便了,那么有没有一种方式能够及时的将代码更新又不需要提交代码到git仓库的呢?答案是有的,我们可以直接使用路径导入的方式导入依赖,具体操作如下:
1 | require gitee.com/ydstudiox/server-framework v0.0.0-20221015103549-fc98374a19d4 |
还有一种方式是最简洁的方式,我推崇此种方式导入本地的自定义包,具体如下:
1 | require gitee.com/ydstudiox/server-framework v0.0.0 |
看这样使用多简洁,依赖库代码有变动不用提交到git上,版本号也不用修改,代码还能及时被载入。其实,写到这个地方,我发现前面其实是走入了歧途,本来很简单的东西,被我给搞复杂了,哈哈!