go中gomodule的使用

目录

1.开启Go Mod

2.配置代理

2.编写go.mod

3.实战

4.遇到的坑

(1) 使用go mod后GoLand中代码没有提示

(2) 某些包没有版本,使用go mod进行控制比较麻烦

(3) 编译的时候显示package XXX is not in GOROOT

4.总结


最近在写实时数据库项目的时候,之前一直使用的是Gopath来进行go环境的配置,但是随时项目需要的第三方模块变多,项目的迁移和管理会很费劲,所以换成了go mod即模块的形式来进行包的管理,在这里分享一下我的使用心得以及在使用过程中遇到的坑。

1.开启Go Mod

众所周知,在go中,第三包的包都会默认放在GoPath/src目录下,在Go1.1之后引入了GoModule的概念,对应的环境变量为GO111MODULE(111就是1.11版本),我们通过使用命令go env -w GO111MODULE=on即可开启go module,在开启了go mod模式之后之前的gopath将不再起作用,整个编译过程将使用go mod来进行控制

2.配置代理

由于某些原因,国外的很多网站不能直接访问,我们可以使用代理来下载go module,这里我使用的是GoProxy

2.编写go.mod

如前所述,在开启go mod 模式之后之前配置的gopath将不会起作用,所有使用mod模型下载的模块将放在gopath/pkg/mod文件夹下,我们可以通过编写go.mod文件来方便的进行包的管理。

我们在main函数所在的同级目录下编写go.mod文件,直接使用go mod init moduleName(自定义的文件名),这样就可以生成go.mod文件,使用go list可以列出所有的使用到的模块,使用go mod download可以自动下载对应的模块

3.实战

我们的项目结构如图所示,以前是使用的gopath进行配置,所以可以看到有对应的bin和pkg文件夹,而src中对应的就是源文件

我们首先进入src文件夹及main函数所在的文件夹中,使用go mod init gdb来生成go.mod文件,再使用 go list和go download来下载对应的模块,最终go.mod的内容如下,并且还会自动帮我们生成go.sum文件

module gdb

go 1.15

require (
	github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.2
	github.com/ahmetb/go-linq/v3 v3.2.0
	github.com/deckarep/golang-set v1.7.1
	github.com/dlclark/regexp2 v1.4.0 // indirect
	github.com/dop251/goja v0.0.0-20210120143036-e933a5491723
	github.com/dop251/goja_nodejs v0.0.0-20201222133159-1629e8d0b836
	github.com/gin-contrib/cors v1.3.1
	github.com/gin-contrib/pprof v1.3.0
	github.com/gin-gonic/gin v1.6.3
	github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
	github.com/json-iterator/go v1.1.10
	github.com/shirou/gopsutil/v3 v3.20.12
	github.com/sirupsen/logrus v1.7.0
	github.com/syndtr/goleveldb v1.0.0
	golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
	github.com/mattn/go-sqlite3 v1.10.0
)

并且可以看到此时Goland中的External Libraries中已经有了我们自定义的gdb,整个的go mod的配置已经完毕!

4.遇到的坑

(1) 使用go mod后GoLand中代码没有提示

遇到这种情况,你可能需要这样设置一下

(2) 某些包没有版本,使用go mod进行控制比较麻烦

例如我在项目中使用到的第三方并发库cmap就是这样的,维护者没有提供版本信息,这个使用使用go mod来管理比较困难,因为go mod中必须要有module version info。这里我使用的的方法是直接将源代码下载下来放在项目中。。。

(3) 编译的时候显示package XXX is not in GOROOT

遇到这种情况你可以参考https://www.cnblogs.com/wind-zhou/p/12824857.html

4.总结

总的来说使用go mod可以很方便的进行整个项目包的管理,推荐大家使用这种方式~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值