golang - 包管理go modules
作者:孙三苗
包管理go modules
项目在不同服务器上运行,需要把需要的包一个一个的重新下载,这一节就来详细说明一下,如何更好的管理第三方安装包:
1、go modules 介绍
自从 Go 官方推出 1.11 之后,增加新的依赖管理模块并且更加易于管理项目中所需要的模块。模块是存储在文件树中的 Go 包的集合,其根目录中包含 go.mod 文件。 go.mod 文件定义了模块的模块路径,它也是用于根目录的导入路径,以及它的依赖性要求。每个依赖性要求都被写为模块路径和特定语义版本。
从 Go 1.11 开始,Go 允许在 $GOPATH/src 外的任何目录下使用 go.mod 创建项目。在 $GOPATH/src 中,为了兼容性,Go 命令仍然在旧的 GOPATH 模式下运行。从 Go 1.13 开始,模块模式将成为默认模式。
建议:为了体验go 更多的功能和解决版本问题,请升级go 到最新版
模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
如果你想直接使用modules而不需要从GOPATH过度,那么把“GO111MODULE”设置为on。
设置命令如下:
go env -w GO111MODULE=on
为了防止下载包出现超时(需要翻墙的包),请设置环境变量 GOPROXY
go env -w GOPROXY=https://goproxy.cn,direct
2、go mod 的使用
####初始化
(1)使用命令初始化go.mod
go mod init ***
说明:其中 *** 可以是自己项目的名字,以便区分。 现在我就是 使用项目名字来初始化,命令为:go mod init github.com/ms
(2) 运行或编译
go run main.go 或 go build main.go
运行以上代码后,会自动下载项目引用的包
(3)查看 文件 go.mod和 go.sum
以下是目前项目的文件内容
go.mod 文件:
module github.com/ms
go 1.13
require
(
github.com/aaudis/GoRedisSession v0.0.0-20130613090635-98d82649209b
github.com/anerg2046/snowflake v0.0.0-20190129041452-77ad75fdcc23
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496
github.com/buger/jsonparser v0.0.0-20191204142016-1a29609e0929
github.com/fatih/structs v1.1.0 github.com/gin-contrib/sessions v0.0.3
github.com/gin-gonic/gin v1.5.0 github.com/go-acme/lego/v3 v3.2.0
github.com/go-ego/gpy v0.0.0-20200107145826-02f541a0f91c
github.com/go-log/log v0.1.0 github.com/gogo/protobuf v1.3.0
github.com/goinggo/mapstructure v0.0.0-20140717182941-194205d9b4a9
github.com/golang/protobuf v1.3.2 github.com/google/uuid v1.1.1
github.com/hashicorp/serf v0.8.2 github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a
github.com/jinzhu/gorm v1.9.11 github.com/micro/cli v0.2.0
github.com/micro/go-micro v1.17.1 github.com/micro/go-plugins v1.5.1
github.com/micro/micro v1.17.1 // indirect
github.com/mwitkow/go-proto-validators v0.3.0
github.com/pkg/errors v0.8.1 github.com/satori/go.uuid v1.2.0
github.com/spf13/cobra v0.0.5 // indirect
github.com/valyala/fastjson v1.4.1
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a
google.golang.org/grpc v1.25.1 gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect
gopkg.in/go-playground/validator.v9 v9.30.0
gopkg.in/square/go-jose.v2 v2.3.1 gopkg.in/yaml.v2 v2.2.4
)
前面部分是包的名字,也就是import时需要写的部分,而空格之后的是版本号,版本号遵循如下规律:
X.Y.Z-pre.0.yyyymmddhhmmss-abcdefabcdef
vX.0.0-yyyymmddhhmmss-abcdefabcdef
vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdefabcdef
vX.Y.Z
版本号+时间戳+hash,我们自己指定版本时只需要制定版本号即可,没有版本tag的则需要找到对应commit的时间和hash值。默认使用最新版本的package。
go.sum 文件
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
……
go.sum文件是我们直接引用的package和它自身需要的以来的版本记录,go modules就是根据这些去找到需要的packages的。有用 | 无用
如果我们不做任何修改,默认会使用最新的包版本,如果包打过tag,那么就会使用最新的那个tag对应的版本。
更多的mod 命令可使用:
go help mod
猜你喜欢
您可能感兴趣的文章:
- Python Warning: Data truncated for column
- elementUI tree组件获取当前选择所有选中(check)和半选中(indeterminate)的节点
- MYSQL中TRUNCATE和DELETE的区别
- PHP json_encode 空对象和空数组处理
- mac无法将“*.zip”解压到“文件夹”。错误22 无效的参数
- 我的web前端学习之路
- 2019主流的前端框架
- 史上最全的前端学习路线图,干货满满
- javascript学习路线图
- tree 树形结构搜索 显示子集
- 关于在vue项目中使用wangEditor 富文本编辑器
- mac 每次要重启bash_profile
- 项目总结(css3中的阴影效果)
- JavaScript之递归 详解!
- go/goland/phpstorm/webstorm 激活码
- php mysql 最后一个id(mysql_insert_id())
- 错误22无效的参数
- mysql alter table修改/ 增加表字段操作
- golang - 安装go