Go-依赖管理

一. 发展历史

  • GOPATH时代:所有代码都放到GOPATH下,对于没有任何外部依赖管理(淘汰)
  • Vendor时代:vendor目录下的包会被优先使用,但没有版本号等信息管理(淘汰)
  • Module时代:通过go.mod配置文件,管理版本信息,依赖包目录等(推荐)
  • 包管理趋势:支持锁定版本支持server本地多版本缓存(优化性能)

二. Vendor机制

项目目录下,如果有vender目录,会优先加载vender目录下的依赖包。

$ go get github.com/tools/godep

godep命令:

$ godep save     #将依赖项输出并复制到Godeps.json文件中
$ godep go       #使用保存的依赖项运行go工具
$ godep get      #下载并安装具有指定依赖项的包
$ godep path     #打印依赖的GOPATH路径
$ godep restore  #在GOPATH中拉取依赖的版本
$ godep update   #更新选定的包或go版本
$ godep diff     #显示当前和以前保存的依赖项集之间的差异
$ godep version  #查看版本信息

在项目目录下执行godep save命令,会在当前项目中创建Godepsvender两个文件夹。


三. GoMod机制

  • Go1.11中推荐用go module模块化编程的方式,管理源代码交换 ( interchange ) 和版本化控制
  • 模块可以包含其他模块,在这种情况下,它们的内容将从父模块中排除。
  • go module可以在任何目录下,而不再强调项目必须在GOPATH目录下。
    在这里插入图片描述

1.开启module: 新版本中默认已是开启状态

$ echo $GO111MODULE      #查看状态
$ export GO111MODULE=on  #开启mod

2.设置代理: 参考 GOPROXY 官网

$ export GOPROXY=https://goproxy.io/

或者,可以把上面的命令写到 .bashrc 或 .bash_profile 文件当中。

3.gomod命令:

$ go mod download   #下载依赖的module到本地cache。“go env”查看GOCACHE,“go clean -cache”清理缓存
$ go mod edit       #编辑go.mod文件
$ go mod graph      #打印模块依赖图
$ go mod init       #初始化当前文件夹, 创建go.mod文件
$ go mod tidy       #增加缺少的module,删除无用的module
$ go mod vendor     #将依赖复制到vendor下
$ go mod verify     #校验依赖
$ go mod why        #解释为什么需要依赖

4.初始化mod:

  • 非GOPATH目录下创建案例项目,执行初始化命令,即可生成go.mod文件
  • 执行go getgo buildgo run命令,会自动下载依赖包并生成go.sum文件(哈希摘要校验)
[root@mypro] $ go mod init github.com/xxx/mypro
go: creating new go.mod: module mypro
go: copying requirements from Godeps/Godeps.json
[root@mypro] $ go get	#下载依赖项,生成go.sum

5.配置依赖项:

  • 包含包名Go版本依赖项替换项排除项配置注解
module github.com/xxx/mypro

go 1.12

//依赖项
require (
   github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de
   github.com/pkg/errors v0.0.0-20190227000051-27936f6d90f9
)

//替换项
replace golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0

//排除项目
exclude old/thing v1.2.3

6.常用命令:

$ go mod edit -fmt        #格式化
$ go mod edit -require=golang.org/x/text        #添加依赖项
$ go mod edit -droprequire=golang.org/x/text    #移除依赖项

四. GoMod示例

1.创建项目:

$ mkdir ~/mypro && cd ~/mypro && touch main.go  #非GOPATH目录

2.编辑示例代码:main.go

package main

import "github.com/sirupsen/logrus" //测试依赖包

func main() {
   logrus.Info("mod test ok")
}

3.初始化mod:

$ go mod init github.com/xxx/mypro

4.测试运行

$ go run main.go

此时,项目在不依赖GOPATH的情况下,由go mod完成了项目的依赖管理。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值