govendor用法

本文详细介绍了govendor这一Golang依赖包管理工具的使用方法,包括安装、初始化、添加、更新和删除依赖包等操作。同时,文章还提供了govendor的常见命令和用法示例,帮助开发者更好地掌握如何使用govendor进行依赖管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么使用govendor

go语言的依赖管理最主要的是版本控制问题。
govendor是Golang的依赖包管理工具,它的出现可以避免不同用户在clone同一个项目后从外部获取不同依赖库版本的问题。
govendor会将项目需要的依赖包添加到项目的vendor目录下,并且该目录中vendor.json文件会保存添加的依赖包的路径等信息。
Golang项目中的go文件在查找依赖的顺序是,先在vendor中查找,vendor没找到然后在GOPATH中查找,都没找到最后在GOROOT中查找。
govendor只是用来管理项目的依赖包,如果GOPATH中本身没有项目的依赖包,则需要通过go get先下载到GOPATH中,再通过govendor add +external拷贝到vendor目录中。

基本用法

安装govendor:go get -u github.com/kardianos/govendor
如果需要使用vendor的项目原本没有vendor,那么需要在该项目的目录下创建vendor
govendor init
之后如果需要添加依赖包,可以通过以下两种方式添加
govendor fetch 依赖包路径
govendor add 依赖包路径

.gitignore的配置:

/vendor/*
!/vendor/vendor.json

根据vendor.json下载依赖:govendor sync

govendor用法例子:

cd path/to/project
govendor init
govendor fetch project_url_with_out_http
cat vendor/vendor.json

govendor常用命令

  • 增加包,搜add,会得到add和fetch这2个命令。
  • 更新包,搜update,会得到update和fetch这2个命令。
  • 删除包,搜remove,得到remove这个命令。
  • 查看已经依赖的包,搜list,得到list、status、license命令,而符合你的是list,并且知道了status能列出过期的包。
➜  project_name git:(develop) govendor --help
govendor (v1.0.9): record dependencies and copy into vendor folder
    -govendor-licenses    Show govendor's licenses.
    -version              Show govendor version
    -cpuprofile 'file'    Writes a CPU profile to 'file' for debugging.
    -memprofile 'file'    Writes a heap profile to 'file' for debugging.

Sub-Commands

    init     Create the "vendor" folder and the "vendor.json" file.
    list     List and filter existing dependencies and packages.
    add      Add packages from $GOPATH.
    update   Update packages from $GOPATH.
    remove   Remove packages from the vendor folder.
    status   Lists any packages missing, out-of-date, or modified locally.
    fetch    Add new or update vendor folder packages from remote repository.
    sync     Pull packages into vendor folder from remote repository with revisions
                 from vendor.json file.
    migrate  Move packages from a legacy tool to the vendor folder with metadata.
    get      Like "go get" but copies dependencies into a "vendor" folder.
    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 them
    fmt, build, install, clean, test, vet, generate, tool

Status Types

    +local    (l) packages in your project
    +external (e) referenced packages in GOPATH but not in current project
    +vendor   (v) packages in the vendor folder
    +std      (s) packages in the standard library

    +excluded (x) external packages explicitly excluded from vendoring
    +unused   (u) packages in the vendor folder, but unused
    +missing  (m) referenced packages but not found

    +program  (p) package is a main package

    +outside  +external +missing
    +all      +all packages

    Status can be referenced by their initial letters.

Package specifier
    <path>[::<origin>][{/...|/^}][@[<version-spec>]]

Ignoring files with build tags, or excluding packages from being vendored:
    The "vendor.json" file contains a string field named "ignore".
    It may contain a space separated list of build tags to ignore when
    listing and copying files.
    This list may also contain package prefixes (containing a "/", possibly
    as last character) to exclude when copying files in the vendor folder.
    If "foo/" appears in this field, then package "foo" and all its sub-packages
    ("foo/bar", …) will be excluded (but package "bar/foo" will not).
    By default the init command adds the "test" tag to the ignore list.

If using go1.5, ensure GO15VENDOREXPERIMENT=1 is set.
命令功能
init初始化 vendor 目录
list列出所有的依赖包
add添加包到 vendor 目录,如 govendor add +external 添加所有外部包
addPKG_PATH 添加指定的依赖包到 vendor 目录
update$GOPATH 更新依赖包到 vendor 目录
remove从 vendor 管理中删除依赖
status列出所有缺失、过期和修改过的包
fetch添加或更新包到本地 vendor 目录
sync本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本
get类似 go get 目录,拉取依赖包到 vendor 目录

转载于:https://www.cnblogs.com/weiyinfu/p/10982848.html

<think>嗯,用户想了解如何在Linux下设置Go使用vendor目录。好的,首先我得回忆一下Go的依赖管理机制。在Go 1.11之后引入了Go Modules,替代了旧的GOPATH模式。vendor目录是Go的一个特性,允许将依赖的代码复制到项目本地,方便版本控制和离线构建。 用户可能是在项目中需要使用vendor目录,可能他们需要确保依赖的特定版本,或者项目需要离线环境支持。需要说明如何启用vendor模式,以及相关的命令。 首先,应该检查Go的版本,确保是1.11以上。然后,初始化模块,使用go mod init。接着,可能需要用go mod vendor命令来创建vendor目录,这会将依赖复制到vendor下。然后,在构建时通过环境变量GOFLAGS="-mod=vendor"或者go build -mod=vendor来指定使用vendor中的依赖。 不过需要注意,用户可能不清楚这些步骤的具体顺序,或者可能遇到问题,比如依赖未正确生成。需要提醒常见问题,比如vendor目录的生成是否正确,Go版本是否合适,以及如何确保构建时正确使用vendor。另外,可能还需要说明vendor目录的优势和适用场景,帮助用户理解何时使用它比较合适。 还要考虑用户是否已经了解Go Modules的基本用法,是否需要从初始化项目开始讲解。可能用户之前使用的是GOPATH模式,现在迁移到Modules,需要指导他们转换。或者他们可能在一个已有项目中开启vendor支持,这时候需要执行哪些步骤。 另外,可能需要提到在go.mod文件中指定依赖版本,因为vendor是根据go.mod和go.sum中的信息来填充的。如果用户手动修改vendor目录里的代码,可能会带来问题,需要提醒他们正确维护依赖的方式。 总结下来,步骤应该是:初始化模块,添加依赖,生成vendor目录,配置构建时使用vendor。同时,解释每个步骤的作用和可能遇到的问题,确保用户能顺利设置。</think>在 Linux 系统中,设置 Go 项目使用 `vendor` 目录(将依赖包本地化到项目中)可以通过以下步骤实现。`vendor` 目录是 Go 1.5+ 引入的特性,用于将项目依赖的第三方库直接存储在项目目录中,便于版本控制和离线构建。 --- ### **1. 启用 Go Modules** 确保你的 Go 版本 ≥ **1.11**(推荐 ≥ 1.14),并已启用 Go Modules 功能: ```bash # 检查 Go 版本 go version # 启用 Go Modules(如果未默认开启) go env -w GO111MODULE=on ``` --- ### **2. 初始化项目(如未初始化)** 进入项目根目录,执行以下命令初始化 Go Modules: ```bash # 初始化项目(生成 go.mod) go mod init <module-name> # 例如: go mod init github.com/yourname/project ``` --- ### **3. 生成 vendor 目录** 通过 `go mod vendor` 命令将依赖包复制到项目下的 `vendor` 目录: ```bash # 自动拉取依赖并生成 vendor 目录 go mod vendor ``` 此命令会根据 `go.mod` 和 `go.sum` 中的依赖信息,将第三方库下载到 `vendor` 目录中。 --- ### **4. 构建时使用 vendor 目录** 在编译或运行项目时,通过以下方式强制优先使用 `vendor` 中的依赖: ```bash # 方式一:添加编译参数 go build -mod=vendor # 方式二:设置全局环境变量(当前终端有效) export GOFLAGS="-mod=vendor" go build ``` --- ### **5. 维护 vendor 目录** - **更新依赖**:修改 `go.mod` 后,重新生成 `vendor`: ```bash go mod tidy # 同步依赖到 go.mod/go.sum go mod vendor # 重新生成 vendor ``` - **检查依赖状态**: ```bash go mod verify # 验证依赖完整性 ``` --- ### **常见问题** 1. **为什么需要 vendor 目录?** - 离线环境构建。 - 锁定依赖版本,避免因第三方库更新导致不兼容。 - 便于版本控制(将依赖与项目代码一起提交)。 2. **vendorGo Modules 的关系?** - Go Modules 是官方依赖管理工具,`vendor` 是依赖本地化的补充。 - 即使使用 `vendor`,仍需维护 `go.mod` 和 `go.sum`。 3. **依赖未正确生成到 vendor?** - 确保执行 `go mod vendor` 前已运行 `go mod tidy`。 - 检查网络权限,确保能正常访问依赖仓库(如 GitHub)。 --- 通过上述步骤,你可以在 Linux 系统中为 Go 项目配置 `vendor` 目录,实现依赖的本地化管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值