在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
go modules官方资料:https://github.com/golang/go/wiki/Modules go版本控制发展史:Go 1.5 Release之前
常⽤用的依赖管理工具 Go 1.11 Release到Go 1.13 Release go modules介绍go modules从go 1.11提出,需要配置环境变量
GO111MODULE=auto 启用,go 1.13默认启用,用于go项目的依赖管理。当编译、运行go项目时,若发现后缀有.mod 文件时即启用module-mode来编译、运行项目。使用module-mode后,项目目录不再需要放置于GOPATH/src目录下了(go1.13及其之后,使用module-mode的项目目录强制不能位于GOPATH目录之内)。 go moudles功能 1.自动添加import声明,如果 .go 文件中需要的模块;2.根据代码中import声明,go中的标准命令(go build,go run,go test等)会自动下载合适的依赖,并更新 go.mod 文件;3.通过命令go get [moduleName] @[moduleVersion](列如, go get [email protected], go get foo@master, go get foo@e3702bed2 )来指定项目中所依赖的模块具体版本,也可以通过编辑go.mod 文件来指定以来版本go modules配置
go modules使用1、开启go modules并设置反向代理 上面已说过,go1.13以上版本GO111MODULE默认已自动开启,不需要重新设置;反向代理主要用来解决获取包时的网络限制,需要设置一下 linux环境下,再终端输入: export GO111MODULE=auto export GOPROXY=https://goproxy.io 不过这种是一次性的,重启之后就会消失,所以可以在环境信息文件 windows环境下设置,在系统环境变量中新增GO111MODULE和GOPROXY,如下图: 另外一种方法是使用Goland IDE vgo,设置如下: 2、在GOPATH 之外的地方,新建一个空文件夹go-mod-test,执行go mod init命令初始化(注意cd到go-mod-test目录下) go mod init初始化命令会在当前目录下生成一个go.mod文件,内容如下:
3、添加依赖包,以gin为案例,gin传送门https://github.com/gin-gonic/gin 在目录中创建一个 package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080") } 4、执行go mod tidy命令(也可以执行:go build/go run),执行完成后,看一下
看到新增一个 gin v1.5.0 的包,还发现目录下成了一个 go.sum 的文件,这个文件可以暂时先不管 此时,你可能很好奇,目录中没发现 gin 包,包下载到哪了? 下载到了 GOPATH/pkg/mod 目录中
5、go run main.go运行一下,在浏览器中输入:localhost:8080/ping,运行效果如下 搞清楚go modules用法后,顿时感觉go包管理方便了好多,可以脱离GOPATH创建项目了,同时包可以指定特定版本了, 反向代理的设置终于摆脱网络限制了,之前很多包由于网络原因下载不下来,简直是噩梦啊 go modules常见命令:go mod init: 初始化modules go list -m: 查看主模块的路径 命令使用: 1、go list -m all //列出项目使用的依赖包 2、go list -m -versions github.com/gin-gonic/gin //查看依赖的版本历史
3、go get github.com/gin-gonic/gin@v1.4.0 //依赖包更新到指定版本 4、go mod edit -require="github.com/gin-gonic/gin@v1.4.0" // 修改 go.mod 文件(从v1.5.0变成了v1.4.0) 5、go mod tidy //下载更新依赖 |
请发表评论