Go mod 依赖管理

1 go mod
Go.mod是Golang1.11版本新引入的官方包管理工具,用于解决记录依赖包具体版本的问题,方便依赖管理,类似于(composer.json 和composer.lock文件)

2 使用go mod

//linux
vim /etc/profile
export GO111MODULE=on 
source /etc/profile

//windows 建议用cmd管理员身份修改,即时生效
set GO111MODULE=on 

GO111MODULE有三个值:off, on和auto(默认值)。
off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
on,go命令行会使用modules,而不去GOPATH目录下查找。
auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
当前目录在GOPATH/src之外且该目录包含go.mod文件
当前文件在包含go.mod文件的目录下面

命令列表:
	download    download modules to local cache
	edit        edit go.mod from tools or scripts
	graph       print module requirement graph
	init        initialize new module in current directory
	tidy        add missing and remove unused modules
	vendor      make vendored copy of dependencies
	verify      verify dependencies have expected content
	why         explain why packages or modules are needed

3 设置代理
依赖于 go module 功能,故在第2步中进行了开启

vim /etc/profile
export GOPROXY=https://goproxy.io
或者
$ export GOPROXY=https://mirrors.aliyun.com/goproxy/
source /etc/profile

很多镜像都可以设置阿里云,比如composer

4 go.mod 文件说明

module robin //模块名,用于引用当前项目方法的起始路径

go 1.17	//go版本

require (	//直接依赖扩展版本
	github.com/gin-gonic/gin v1.7.7
	github.com/go-sql-driver/mysql v1.6.0
	github.com/jinzhu/gorm v1.9.16
	github.com/sirupsen/logrus v1.8.1
	gorm.io/gorm v1.22.5
)

require (	//间接依赖版本,记录的原因是依赖里没有使用go.mod
	github.com/gin-contrib/sse v0.1.0 // indirect
	github.com/go-playground/locales v0.13.0 // indirect
	github.com/go-playground/universal-translator v0.17.0 // indirect
	github.com/go-playground/validator/v10 v10.4.1 // indirect
	github.com/golang/protobuf v1.3.3 // indirect
	github.com/jinzhu/inflection v1.0.0 // indirect
	github.com/json-iterator/go v1.1.9 // indirect
	github.com/leodido/go-urn v1.2.0 // indirect
	github.com/mattn/go-isatty v0.0.14 // indirect
)

间接依赖场景
1 直接依赖的包,没有使用Go Module管理依赖,无go.mod文件,那么这个包的所有依赖都会以间接的方式出现在当前项目的的go.mod文件中,以indirect标识
2 直接依赖那个包,go.mod 文件不完整,缺失的依赖也会以间接的方式出现在当前的 go.mod 中
注意:间接依赖理论上不应该出现,如果 go.mod 中出现了间接依赖,那么要确认是否使用了过时的开源包

5 问题汇总

1 依赖包地址
$GOPATH/pkg/mod

2 go.mod 和 go.sum
go.mod存储的是依赖包的版本信息
go.sum /go.mod ,记录每个依赖库的版本和哈希值
官方建议,将两者同时放入git版本控制中,原因类似于composer

3 beego项目迁移
把项目复制到非gopath路径,进入项目
执行go mod init template 初始化go.mod文件,内容类似如下:

module template

go 1.12

require (
	github.com/astaxie/beego v1.12.1
	github.com/go-sql-driver/mysql v1.5.0
	github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
)

执行go build 下载包,生成go.sum及

[@bx16-77-246 /var/www/gocode/template]# go build
go: finding module for package github.com/astaxie/beego/orm
go: finding module for package github.com/astaxie/beego
go: finding module for package github.com/astaxie/beego/logs
go: finding module for package github.com/astaxie/beego/config
go: finding module for package github.com/go-sql-driver/mysql
go: downloading github.com/astaxie/beego v1.12.1
go: downloading github.com/go-sql-driver/mysql v1.5.0
go: found github.com/astaxie/beego in github.com/astaxie/beego v1.12.1
go: found github.com/go-sql-driver/mysql in github.com/go-sql-driver/mysql v1.5.0

此时 nohup ./template & 允许项目的可执行程序即可
至此,迁移完毕。

4 golang unrecognized import path “golang.org/tools” 等类似一系列的问题
确保goproxy设置正确并生效

5 go 1.12版本,发现env没有GO111MODULE
只好升级go 到 1.14.1版本,正常可用

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值