博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go依赖管理-govendor
阅读量:7212 次
发布时间:2019-06-29

本文共 2567 字,大约阅读时间需要 8 分钟。

Golang 官方并没有推荐最佳的包管理方案。到了1.5版本时代,官方引入包管理的设计,加了 vendor 目录来支持本地包管理依赖。官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。

下面简要介绍一个我在项目中用到的 -- govendor。 该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。 对于 govendor 来说,依赖包主要有以下多种类型:

状态 缩写状态 含义
+local l 本地包,即项目自身的包组织
+external e 外部包,即被 $GOPATH 管理,但不在 vendor 目录下
+vendor v 已被 govendor 管理,即在 vendor 目录下
+std s 标准库中的包
+unused u 未使用的包,即包在 vendor 目录下,但项目并没有用到
+missing m 代码引用了依赖包,但该包并没有找到
+program p 主程序包,意味着可以编译为执行文件
+outside 外部包和缺失的包
+all 所有的包

Installation

go get -u github.com/kardianos/govendor复制代码

命令行执行 govendor,若出现以下信息,则说明安装成功。

➜  ~ govendorgovendor (v1.0.8): record dependencies and copy into vendor folder    -govendor-licenses    Show govendor's licenses.    -version              Show govendor version......复制代码

** Warning:** 需要把 $GOPATH/bin/ 加到 PATH 中。

Quickstart

# Setup your project.cd "my project in GOPATH"# 初始化 vendor 目录, project 下出现 vendor 目录govendor init# Add existing GOPATH files to vendor.govendor add +external# View your work.govendor list# Look at what is using a packagegovendor list -v fmt# Specify a specific version or revision to fetchgovendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55# Get latest v1.*.* tag or branch.govendor fetch golang.org/x/net/context@v1   # Get the tag or branch named "v1".govendor fetch golang.org/x/net/context@=v1  # Update a package to latest, given any prior version constraintgovendor fetch golang.org/x/net/context# Format your repository onlygovendor fmt +local# Build everything in your repository onlygovendor install +local# Test your repository onlygovendor test +local复制代码

Sub-commands

init     创建 vendor 文件夹和 vendor.json 文件list     列出已经存在的依赖包add      从 $GOPATH 中添加依赖包,会加到 vendor.jsonupdate   从 $GOPATH 升级依赖包remove   从 vendor 文件夹删除依赖status   列出本地丢失的、过期的和修改的packagefetch   从远端库增加新的,或者更新 vendor 文件中的依赖包sync     Pull packages into vendor folder from remote repository with revisionsmigrate  Move packages from a legacy tool to the vendor folder with metadata.get     类似 go get,但是会把依赖包拷贝到 vendor 目录license  List discovered licenses for the given status or import paths.shell    Run a "shell" to make multiple sub-commands more efficient for large projects.go tool commands that are wrapped:      `+
` package selection may be used with them fmt, build, install, clean, test, vet, generate, tool复制代码

Warning:

  • The project must be within a $GOPATH/src.

  • If using go1.5, ensure you set GO15VENDOREXPERIMENT=1.

参考

来源

本文来自:

感谢作者:happen

查看原文:

转载于:https://juejin.im/post/5acc8dc3f265da23870f299b

你可能感兴趣的文章
Google VC投资SDN初创公司Plexxi
查看>>
英特尔在移动市场另辟蹊径
查看>>
英特尔收购Movidius背后:为什么我们需要一款专门的CV处理芯片?
查看>>
三大新闻机构起诉FBI,FBI与苹果大战续集开幕?
查看>>
未来数据中心的选择:宽带多模光纤
查看>>
信息安全隐患日趋严重 专家呼吁政策监管仍待加强
查看>>
Java 代理(proxy)模式
查看>>
转型不该只是一句空话 还应该有更多实质
查看>>
在QTP中申明XPath
查看>>
端到端加密(E2EE)技术分析:在移动应用中实现安全通信的利器
查看>>
信息安全 CIO最关注什么?
查看>>
物联网是怎样把世界联系起来的
查看>>
大数据在统计中的应用初探
查看>>
IBM与思科在融合型基础设施领域实现另一突破
查看>>
《深入理解Elasticsearch(原书第2版)》——第2章 查询DSL进阶 2.1 Apache Lucene默认评分公式解释...
查看>>
三星对外发售高性能芯片,华为上升势头或受重击!
查看>>
TOP10全球ICT技术发展趋势
查看>>
经济参考报:"想哭"病毒为中国网络安全敲警钟
查看>>
全新WiFi技术问世 更适合智能家庭和物联网
查看>>
【云和恩墨大讲堂】Oracle线上嘉年华第二讲
查看>>