Skip to content

在 Go 语言中,vendor 目录用于管理项目的依赖项:把第三方库的副本放进项目里,构建时不再依赖外部仓库。

vendor 目录概述 ​

作用 ​

  • 包的隔离:vendor 目录允许你将项目所依赖的第三方库的副本存放在项目内,以防止依赖的更新或变动对项目造成影响。
  • 稳定性:确保项目在不同的开发环境中具有一致的依赖版本,不受外部依赖库更新的影响。
  • 构建过程:Go 工具链在构建项目时会优先使用 vendor 目录中的包,确保使用的是项目指定的版本。

使用 vendor 目录 ​

创建和使用 vendor 目录 ​

  1. 创建 vendor 目录

    在项目的根目录下创建一个 vendor 目录,并将你所需的依赖库复制到这个目录中。你可以手动下载和复制,或者使用 Go 工具自动管理。

  2. 使用 go mod vendor 命令

    使用 go mod vendor 命令可以自动将 go.mod 文件中列出的所有依赖项下载到 vendor 目录中。

    bash
    go mod vendor

    这会根据 go.mod 文件中指定的依赖项创建 vendor 目录,并将所有依赖项的副本放入其中。

  3. 构建和测试

    当你构建或测试项目时,Go 工具链会自动优先使用 vendor 目录中的包。这样,你可以确保在项目中使用的是固定版本的依赖项。

示例 ​

从初始化模块开始走一遍 vendor 流程:

  1. 初始化模块

    首先,确保你已经初始化了 Go 模块:

    bash
    go mod init example.com/myapp
  2. 添加依赖

    使用 go get 命令添加你需要的依赖:

    bash
    go get github.com/some/dependency@v1.2.3
  3. 生成 vendor 目录

    运行 go mod vendor 命令来创建 vendor 目录:

    bash
    go mod vendor
  4. 检查 vendor 目录

    vendor 目录将包含所有你在 go.mod 文件中指定的依赖项。例如,目录结构可能如下:

    myapp/
    ├── go.mod
    ├── go.sum
    ├── main.go
    └── vendor/
        └── github.com/
            └── some/
                └── dependency/
                    └── dependency.go
  5. 构建项目

    当你运行 go build 或 go test 命令时,Go 工具链将优先使用 vendor 目录中的包:

    bash
    go build
    bash
    go test

使用 vendor 目录的注意事项 ​

  • 版本管理:确保 vendor 目录中的依赖项版本与你在 go.mod 文件中指定的版本一致。可以通过 go mod tidy 来整理和更新 go.mod 文件。
  • 存储和同步:将 vendor 目录纳入版本控制系统(如 Git),可以确保其他开发者在克隆项目时也能获取相同的依赖项。

总结 ​

  • vendor 目录:存放第三方依赖的副本,构建时优先使用,版本由 go.mod 锁定。
  • 创建和管理:go mod vendor 生成目录,go mod tidy 整理 go.mod。
  • 构建和测试:Go 工具链优先用 vendor 里的包,外部依赖的更新影响不到本项目。

参考资料 ​

同层页面 ​

相关页面 ​

Hello Golang