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,若出现以下信息,则说明安装成功。

➜  ~ govendor
govendor (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 package
govendor list -v fmt# Specify a specific version or revision to fetch
govendor 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 constraint
govendor fetch golang.org/x/net/context# Format your repository only
govendor fmt +local# Build everything in your repository only
govendor install +local# Test your repository only
govendor test +local
复制代码

Sub-commands

init     创建 vendor 文件夹和 vendor.json 文件
list     列出已经存在的依赖包
add      从 $GOPATH 中添加依赖包,会加到 vendor.json
update   从 $GOPATH 升级依赖包
remove   从 vendor 文件夹删除依赖
status   列出本地丢失的、过期的和修改的package
fetch   从远端库增加新的,或者更新 vendor 文件中的依赖包
sync     Pull packages into vendor folder from remote repository with revisions
migrate  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:`+<status>` package selection may be used with themfmt, 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.

参考

  • govendor github

  • go 依赖管理利器 -- govendor

来源

本文来自:Segmentfault

感谢作者:happen

查看原文:go依赖管理-govendor

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

go依赖管理-govendor相关推荐

  1. linux go vendor目录,Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  2. Golang依赖管理工具:glide从入门到精通使用

    2019独角兽企业重金招聘Python工程师标准>>> 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰的Maven和Gradle. G ...

  3. golang语言的包依赖管理方式 综述

    引言: 一.GOPATH简介: 二.GOPATH 模式 - go get 三.GO VENDOR 模式 go vender 之 dep 一· 优势: 二· 操作使用 三· 问题 四.Go Module ...

  4. Gradle系列教程之依赖管理

    这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定位不同类型仓库.依赖管理看起来很容易,但是当出现依赖解析冲突时就会很棘手,复杂的依赖关系可能导致构建中依赖一个库的多个版本.Gradle ...

  5. 用CocoaPods做iOS程序的依赖管理

    CocoaPods 简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm.随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供 ...

  6. [笔记]解决m2eclipse给项目添加maven依赖管理时可能不给项目的build path...

    为什么80%的码农都做不了架构师?>>>    解决办法:在m2eclipse提供的菜单里关闭项目的Maven依赖管理,然后再启动Maven的依赖管理!!! 检查:1)查看项目的.c ...

  7. Composer PHP依赖管理

    对于现代语言而言,包管理器基本上是标配.Java有Maven,Python有pip,Ruby有gem,Nodejs有npm.PHP的则是PEAR,不过PEAR坑不少: 依赖处理容易出问题 配置非常复杂 ...

  8. nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理

    Yarn能帮你解决的五件事 转自: http://www.qingpingshan.com/jb/javascript/185590.html 长话短说(TL;DR):在 JavaScript 领域有 ...

  9. Gradle之依赖管理

    Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...

最新文章

  1. 用WinForm/WPF代码来为.NET Core 3.0功能投票
  2. nuget.org 发布自己的程序包
  3. Python将py文件生成exe文件
  4. 计算机常用端口号汇总
  5. 展望2018:WebRTC技术现状、应用开发与前景
  6. linux 内核块设备驱动,你了解Linux 块设备驱动?
  7. ADI AD9371/9375+Xilinx ZC706 No-OS初始工程搭建 ——Vivado2019.2
  8. Armadillo Hardware ID Patcher v1.2
  9. PortableApps使用入门
  10. 如何降低IE安全级别
  11. 计算机科学与技术到底学什么?
  12. 单片机c语言*乘法,单片机c语言教程:运算符和表达式(位运算符)
  13. linux中文找不到resource,linux :Resource temporarily unavailable错误解决
  14. webstorm下载地址分享
  15. python小白社区_Python小白教学系列| 初识python-Go语言中文社区
  16. 2018年最新黑马前端视频教程视频与源码全集
  17. 通过需求条目的层次去解决问题
  18. 小米拒绝权限_小米应用商城:我下载的是快图,打开却是天天相册,还发扣费短信...
  19. 微信小程序自动保留空格换行
  20. zookeeper和k8s_Kubernetes(k8s)运行ZooKeeper,一个分布式系统协调器

热门文章

  1. 计算机通信辞典登录,数字化
  2. Oozie 3.3.1安装
  3. python之attrgetter函数对对象排序
  4. 递归 - 求数字/字符串的全排列
  5. 放回采样最终不同样本数量
  6. jQuery操作radio、checkbox、select总结
  7. Android风格与主题
  8. error: [FabricCAClientService.js]: Failed to enroll admin, error:%o message=Calling enroll endpoint
  9. 03MyBatis的事务管理和缓存机制
  10. ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️