在golang中,可以通过 go mod的mod文件中添加依赖,依赖其他模块。这些模块既可以是来自第三方的模块,也可以是来自自己的模块。
例如:
下面代码的含义是 模块foolDealer 依赖模块 github.com/google/wire 和 github.com/wild46cat/golib
module foolDealer
go 1.13
require github.com/google/wire v0.4.0
require github.com/wild46cat/golib v0.0.0-20191224150240-e041ab0d7835
首先说一下,这里的wire模块是google的模块,而golib模块,是我自己写的模块,方便自己调用。
好,下面上货。讲解一下如何处理golang的模块
1、首先新建一个项目golib,用于存储自己的公共代码。
需要注意的是,这里的module的名称应该是 github.com/wild46cat/golib
module github.com/wild46cat/golib
go 1.13
2、上传到github上。
3、新建一个测试项目foolDealer
在测试项目的go.mod文件中添加依赖
require github.com/wild46cat/golib latest
注意,这里如果不清楚有什么版本,可以直接用latest代替。
然后执行命令
go mod vendor
go mod download
go mod tidy
执行后,能够看到,会出现一个vendor文件夹(当然,代码中应该有对应的import "github.com/wild46cat/golib/utils")。
4、查看当前go.mod文件中是否发生了变化
module foolDealer
go 1.13
require github.com/google/wire v0.4.0
require github.com/wild46cat/golib v0.0.0-20191224150240-e041ab0d7835
5、在代码中引用能够使用
package src
import (
"github.com/google/wire"
"github.com/wild46cat/golib/utils"
"sync"
)
func main() {
wire.Build()
utils.SToI64("aa")
}
关于引入模块的版本问题
默认如果没有打tag的话,当有最新的提交到master分支上,那么go mod会引用对应的版本号-时间戳-提交id作为对应的版本。例如:
v0.0.0-20191224150240-e041ab0d7835
如果项目有tag那么会下载最新version
如何打tag
1、首先本地打tag
git tag -a v1.0.0 HEAD -m 'v1.0.0'
或者
git tag -a v1.0.0 -m 'v1.0.0'
如果发现已经存在tag,想要覆盖tag可以使用
git tag -a -f v1.0.0 HEAD -m 'v1.0.0'
2、推送到远程上
推送到远端
git push origin v1.0.0
推送所有tag到远端
git push origin --tags
查看远程tag
git ls-remote
From git@github.com:wild46cat/golib.git
e041ab0d78356ecbce9eee0d2531b339bc590f49 HEAD
e041ab0d78356ecbce9eee0d2531b339bc590f49 refs/heads/master
f594e1e121bd91556f7a40d229cc59ebb7bbe7f2 refs/tags/v1.0.0
e041ab0d78356ecbce9eee0d2531b339bc590f49 refs/tags/v1.0.0^{}
其中v1.0.0有多个,带有^{}的是当前tag对应的提交版本
3、删除远程tag
git push origin :refs/tags/v1.0.0
关于tag和无tag切换问题
关于从有tag变为没有tag时的处理。一般我们在刚刚还是开发的时候,不需要指定tag,直到我们的模块稳定后再使用打tag的方式。那么这样就会出现从有tag到没有tag或者从没有tag到有tag的过程。这时候我们首先要把需要引入的包改为latest,同时执行下面的命令
go mod tidy
go mod download
go mod vendor