新闻详情

新闻详情

首页 / 资讯中心 / 详情

Glide:Go 语言 Vendor 依赖管理工具实战指南(glide.yaml、glide.lock 与核心命令全解析)

发布时间:2026/9/26 2:59:07来源:尧图网络
Glide:Go 语言 Vendor 依赖管理工具实战指南(glide.yaml、glide.lock 与核心命令全解析)
开发工具包管理器【免费下载链接】glidePackage Management for Golang项目地址https://gitcode.com/gh_mirrors/gli/glide点击查看免费下载Glide 是 Go 语言的包依赖管理工具其定位与 CargoRust、npmNode.js、PipPython、BundlerRuby等生态中的包管理器一一对应专门用于管理$GOPATH下项目中的vendor/目录。本文以 docs/index.md 为骨架结合本仓库源码与官方命令文档系统讲解 Glide 的核心功能、安装方式、项目布局、glide.yaml与glide.lock双文件模型、版本约束语法以及全部常用命令帮助你快速上手并将现有项目平滑迁移到 Glide。Glide 是什么Glide 是面向 Go 项目的包管理器它解决的核心问题是Go 1.5 引入的 vendor 机制允许每个项目在vendor/目录下存放自己的依赖副本而 Glide 负责解析、获取、锁定并安装这些依赖。与go get直接拉取最新代码不同Glide 通过配置文件精确记录依赖的名称、版本或版本范围、版本控制信息私有仓库或类型无法自动检测时并生成锁文件保证依赖树的可复现性。从功能清单看Glide 提供以下核心能力将依赖信息记录在glide.yaml文件中包括名称、版本或版本范围以及私有仓库或类型无法自动检测时的版本控制信息等在glide.lock文件中锁定每个包的具体 revision提交 ID从而支持可复现地获取整棵依赖树原生支持语义化版本Semantic Versions及语义化版本范围支持 Git、Bzr、HG、SVN 四种版本控制系统与go get支持的 VCS 完全一致利用vendor/目录即历史上所称的 Vendor Experiment使不同项目可以拥有同一依赖的不同版本支持包别名aliasing便于处理 fork 场景可从 Godep、GPM、Gom、GB 导入既有配置。关于当前生态的定位需要特别说明Go 官方如今已全面转向 Go Modules 管理依赖Glide 项目本身基本处于停更维护状态README.md 已明确提示社区改用 Go Modules。因此本文面向的是仍在维护基于 GOPATH vendor 的老项目或需要阅读、迁移历史代码仓库的开发者。安装 Glide官方提供了四种安装途径覆盖脚本、发布包、系统包管理器与源码构建1. 一键脚本Mac / Linuxcurl https://glide.sh/get | sh该脚本会自动下载并安装最新的语义化版本发布包。2. 下载版本化 ReleaseGlide 的发布包遵循语义化版本Semantic Versioning可从官方 Release 页面下载对应平台的二进制。二进制包覆盖 Mac、Linux 与 Windows。3. 系统包管理器Mac 使用 Homebrewbrew install glideUbuntu 12.04/14.04/15.10/16.04 使用官方 PPAsudo add-apt-repository ppa:masterminds/glide sudo apt-get update sudo apt-get install glideUbuntu Zesty17.04上包名改为golang-glide。4. 开发版快照go getgo get -u github.com/Masterminds/glide注意这种方式安装的是最新开发快照不是发布版本。5. 从源码构建将本仓库克隆到$GOPATH/src/github.com/Masterminds/glide后若使用 Go 1.5需先设置export GO15VENDOREXPERIMENT1Go 1.6 默认开启Go 1.7 起始终开启且无法关闭执行make build得到./glide二进制可放入$PATH或使用make install自动安装。有趣的是Glide 自身也使用 Glide 来管理自己的依赖仓库根目录的 glide.yaml 与 glide.lock 就是活生生的自举示例。Glide 的工作原理与项目结构Glide 的工作流程可以概括为扫描 → 读规则 → 拉取 → 输出四步扫描Glide 扫描应用或库的源码确定所需依赖读规则读取glide.yaml中的规则版本、fork 别名等确定每个依赖的版本与来源位置递归解析遇到依赖包后继续扫描它的 import 以确定传递依赖dependencies of dependencies若依赖项目自身带有glide.yaml则优先利用其中的依赖规则同时也会读取 Godep、GB、GOM、GPM 的配置输出将所有依赖导出到vendor/目录供 Go 工具链使用并生成包含全部依赖含传递依赖的glide.lock文件。一个典型的 Glide 项目结构如下- $GOPATH/src/myProject (你的项目) | |-- glide.yaml | |-- glide.lock | |-- main.go (你的 Go 主代码) | |-- mySubpackage (你也可以创建自己的子包) | | | |-- foo.go | |-- vendor |-- github.com | |-- Masterminds | |-- ... 等等三个关键命令构成了日常使用的主循环glide init初始化新项目glide update依据扫描结果与规则重新生成依赖版本glide install按glide.lock中锁定的版本安装跳过扫描若 lock 文件不存在则退化为一次 update。glide.yaml项目与依赖的配置中心glide.yaml是 Glide 的指挥中枢承担两件核心工作命名当前包、声明外部依赖。下面是一个完整示例字段含义参考 docs/glide.yaml.mdpackage: github.com/Masterminds/glide homepage: https://glide.sh license: MIT owners: - name: Matt Butcher email: technosophosgmail.com homepage: http://technosophos.com/ - name: Matt Farina email: mattmattfarina.com homepage: https://www.mattfarina.com/ ignore: - appengine excludeDirs: - node_modules import: - package: gopkg.in/yaml.v2 - package: github.com/Masterminds/vcs version: ^1.2.0 repo: gitgithub.com:Masterminds/vcs vcs: git - package: github.com/codegangsta/cli version: f89effe81c1ece9c5b0fda359ebd9cf65f169a51 - package: github.com/Masterminds/semver version: ^1.0.0 testImport: - package: github.com/arschles/assert顶层字段逐一说明package顶层包在GOPATH中的位置用于防止某个 import 反向引入顶层包自身homepage项目主页地址如http://k8s.iolicenseSPDX 许可证标识如MIT或许可证文件路径便于自动化工具与使用者识别owners一个或多个项目所有者个人或组织可用于安全问题的定向通知而不必公开提交 bugignore需要 Glide 忽略的包名列表注意是包名而非目录excludeDirs本地代码库中需要排除在依赖扫描之外的目录列表import要导入的包列表每项可包含package包名唯一必填项。命名规则与go工具一致映射到 VCS 远程位置的包名以.git、.bzr、.hg、.svn结尾如example.com/foo/pkg.git/subpkgGitHub、BitBucket、Launchpad、IBM Bluemix Services 与 Google Source 上的 Go 包是特例无需 VCS 扩展名version语义化版本、版本范围、分支、标签或提交 ID详见 docs/versions.mdrepo当包名并非仓库地址、或属于私有仓库时在此指定实际仓库地址。包会从该 repo 检出并放到package指定的位置这正是 fork 别名能力的来源package与repo可以完全不同vcs指定 VCS 类型git、hg、bzr、svn仅在名称无法自动检测类型时需要。例如以.git结尾或位于 GitHub 的仓库可自动识别为 Git而 Bitbucket 上的仓库会通过 API 探测类型subpackages仓库中被实际使用的子包记录而非仓库内全部包os操作系统过滤列表。设置后 Glide 会比较当前运行 OS 与列表匹配才拉取该依赖未设置则跳过过滤。名称与构建标记及GOOS环境变量的取值一致arch架构过滤列表逻辑同os取值与GOARCH一致。testImport测试专用的依赖包列表不在import中重复出现每项的字段与import完全相同。版本写法提示version要么是 VCS 相关的取值任何能 checkout 的东西如 Git 的分支、标签、哈希要么是能被github.com/Masterminds/semver包解析的语义化版本约束。另外建议使用基础包名而非子包名导入例如用github.com/kylelemons/go-gypsy而不是github.com/kylelemons/go-gypsy/yaml。源码中的字段落地在源码 cfg/config.go 中Config结构体通过 YAML tag 与上述字段一一对应Namepackage、Description、Homehomepage、License、Owners、Ignore、ExcludeexcludeDirs、Importsimport、DevImportstestImport。每个依赖则对应 Dependency 结构体Namepackage、Referenceversion、Repositoryrepo、VcsTypevcs、Subpackages、Arch、Os。该结构体还实现了UnmarshalYAML/MarshalYAML钩子cfg/config.go负责将旧格式的ref字段映射为version、过滤非法 VCS 类型、将子包名规范化为根包名等兼容性处理说明 Glide 对历史配置有相当好的宽容度。仓库自身的 glide.yaml 就是一个可复制的真实示例依赖gopkg.in/yaml.v2无版本约束、github.com/Masterminds/vcs^1.13.1、github.com/codegangsta/cli^1.16.0、github.com/Masterminds/semver^1.4.0以及github.com/mitchellh/go-homedir无版本约束。版本与范围语义化版本的完整语法Glide 全面支持语义化版本SemVer、SemVer 范围、分支、标签与提交 ID。版本语法的完整说明见 docs/versions.md以下是各语法形态基本范围运算符简单范围形如 1.2.3表示取1.2.3之后的最新版本。支持以下运算符运算符含义备注等于可省略不写!不等于大于小于大于等于小于等于运算符可以组合,是与||是或||会让两侧的与组分别参与判定。例如 1.2, 3.0.0 || 4.2.3。连字符范围Hyphen Ranges1.2 - 1.4.5等价于 1.2, 1.4.52.3.4 - 4.5等价于 2.3.4, 4.5通配符比较x、X、*均可作为通配符适用于所有比较运算符用在上时退化为补丁级别比较见 Tilde。例如1.2.x等价于 1.2.0, 1.3.0 1.2.x等价于 1.2.0 2.x等价于 3*等价于 0.0.0Tilde 范围补丁级~用于补丁级范围当指定了 minor 版本时限制补丁级变化当缺少 minor 号时则限制 major 级变化~1.2.3等价于 1.2.3, 1.3.0~1等价于 1, 2~2.3等价于 2.3, 2.4~1.2.x等价于 1.2.0, 1.3.0~1.x等价于 1, 2Caret 范围Major 级^用于 major 级范围适合 API 版本约束——major 变化通常意味着 API 破坏性变更^1.2.3等价于 1.2.3, 2.0.0^1.2.x等价于 1.2.0, 2.0.0^2.3等价于 2.3, 3^2.x等价于 2.0.0, 3glide.lock可复现安装的关键与glide.yaml记录规则不同glide.lock 记录的是完整依赖树与每个包当前使用的 revision提交 ID。它的价值在于并发安装由于完整依赖树已知glide install可以同时为多个依赖安装并设置正确的 revision实现快速、可复现的安装审计与排障lock 文件保留了超出当前代码库需要的完整依赖树记录与 revision 信息可用于审计、或排查问题期间定位依赖树发生了什么变化。lock 文件不应手工编辑——只要你会读glide.yaml就能大致读懂glide.lockdocs/glide.lock.md。本仓库根目录的 glide.lock 展示其真实格式顶部是hash依赖树哈希与updated时间戳接着是imports列表每个条目包含name与version指向具体的 commit ID以及空的testImports。典型使用链路glide update在glide.yaml中声明^1.2.3这类范围时会在glide.lock中固定到具体 commit IDglide install则直接读取 lock 文件安装这些固定版本从而保证团队与 CI 环境的依赖完全一致。核心命令全览Glide 的命令体系围绕初始化、增删依赖、更新、安装、检查设计完整文档见 docs/commands.md对应实现位于 action/ 目录。glide create别名 init——初始化工作区创建glide.yaml并尝试猜测包与版本若项目已使用 Godep则采用其指定版本Glide 会扫描代码库无论依赖是否由其他包管理器声明都能识别出正在使用的 import。$ glide create [INFO] Generating a YAML configuration file and guessing the dependencies [INFO] Attempting to import from other package managers (use --skip-import to skip) [INFO] Scanning code to look for dependencies [INFO] -- Found reference to github.com/Masterminds/semver [INFO] -- Found reference to github.com/Masterminds/vcs [INFO] -- Found reference to github.com/codegangsta/cli [INFO] -- Found reference to gopkg.in/yaml.v2 [INFO] Writing configuration file (glide.yaml) [INFO] Would you like Glide to help you find ways to improve your glide.yaml configuration? [INFO] If you want to revisit this step you can use the config-wizard command at any time. [INFO] Yes (Y) or No (N)? n [INFO] You can now edit the glide.yaml file. Consider: [INFO] -- Using versions and ranges. See https://glide.sh/docs/versions/ [INFO] -- Adding additional metadata. See https://glide.sh/docs/glide.yaml/ [INFO] -- Running the config-wizard command to improve the versions in your configuration使用--skip-import可跳过从其他包管理器导入的尝试。glide config-wizard——交互式版本向导运行一个向导扫描依赖并获取其信息交互式地给出建议例如发现依赖使用语义化版本帮助挑选合适的版本范围。可随时重新运行对应实现见 action/config_wizard.go。glide get [package name]——获取并登记依赖将一个或多个包下载到vendor/目录并写入glide.yaml$ glide get github.com/Masterminds/cookooget会内部解析该包的依赖包括读取其 Godep、GPM、Gom、GB 配置文件。还支持把版本或范围与包名一起传入用锚点#分隔$ glide get github.com/Masterminds/cookoo#^1.2.3若未指定版本或范围、且依赖使用了语义化版本Glide 会交互式询问是否采用。glide update别名 up——更新整棵依赖树下载或更新glide.yaml中列出的全部库到vendor/并递归遍历依赖包拉取所需内容、读取其配置$ glide up递归过程中会查找其他由 Glide、Godep、gb、gom、GPM 管理的项目发现即按需安装。同时创建或更新glide.lock把依赖固定到具体版本例如glide.yaml中声明范围为^1.2.3则 lock 文件会记录具体 commit ID为glide install的可复现安装提供基础。使用-v标志可移除拉取包中嵌套的vendor/目录。glide install——按锁文件安装从glide.lock安装 commit ID 级别的精确版本$ glide install若 lock 文件与glide.yaml不一致例如配置有变更会给出警告重新运行glide up即可重建 lock 文件若不存在 lock 文件install会自动执行一次 update 并生成 lock 文件。glide novendor别名 nv——跳过 vendor 测试go test ./...会遍历包括vendor在内的所有子目录而测试自己的应用时往往不希望跑依赖及其传递依赖的全部测试。novendor列出除vendor外的所有目录$ go test $(glide novendor)glide name——输出包名脚本化场景下需要知道当前包名时使用返回glide.yaml中记录的包名。glide tree——导入树可视化已废弃展示导入树不含标准库由于 vendoring 使同一包可能存在于多个位置tree会同时打印每个包的所在路径。该命令已废弃将在未来版本移除见 README.md 与 action/tree.go。glide list——列出全部导入包按字母序展示项目导入的全部包$ glide list INSTALLED packages: vendor/github.com/Masterminds/cookoo vendor/github.com/Masterminds/cookoo/fmt vendor/github.com/Masterminds/cookoo/io vendor/github.com/Masterminds/cookoo/web vendor/github.com/Masterminds/semver vendor/github.com/Masterminds/vcs vendor/github.com/codegangsta/cli vendor/gopkg.in/yaml.v2glide help 与 glide --version$ glide help # 打印帮助 $ glide --version # 打印版本并退出 glide version 0.12.0glide mirror——仓库镜像管理镜像允许把某个仓库地址替换为另一个镜像地址常用于 CI 缓存或本地开发依赖glide mirror set [original] [replacement] glide mirror set [original] [replacement] --vcs [type]例如glide mirror set https://github.com/example/foo https://git.example.com/example/foo.git glide mirror set https://github.com/example/foo file:///path/to/local/repo --vcs git移除与列出镜像glide mirror remove [original]镜像配置存放在GLIDE_HOME目录下的mirrors.yaml文件中详见 docs/mirrors.md 与 mirrors/ 目录。在源码层面Dependency.Remote()方法cfg/config.go正是先检查镜像映射、再决定实际拉取地址的枢纽。支持的版本控制系统Glide 支持 Git、SVN、MercurialHg与 Bzr 四种 VCS与go get的支持范围一致具体交互通过github.com/Masterminds/vcs包完成见 repo/vcs.go。其中 bzr 与 hg 属于进行中的支持状态可能需要额外调优。从其他包管理器导入配置导入 GPM、Godep、gom、gb 配置分为两个层面传递安装当你 import 的某个包自身带有 GPM/Godep/gom/gb 配置时Glide 会递归地自动安装其依赖显式导入使用glide import命令生成glide.yaml例如glide import godep会检测项目的 Godep 配置并生成配置文件。导入操作会合并你现有的glide.yaml与对应管理器发现的依赖然后输出结果不会覆盖原文件。写入文件示例$ glide import godep -f glide.yaml常见问题FAQQGo 本身没有子包概念为什么 Glide 要有 subpackagesGo 中每个目录就是一个包单仓库多包时没问题但多个包分布在不同的 VCS 位置时情况复杂了。一个包含多个包的集合项目应使用同一份信息含版本来管理通过 subpackages 分组Glide 就能统一管理相关包的信息。Qbzr或 hg行为不符合预期这两个 VCS 的支持属于进行中状态可能还需调优。可关注github.com/Masterminds/vcs包及其测试如 repo/vcs.go。Q应该把vendor/提交进版本控制吗取决于你。它不是必需的但入库可能带来额外工作量和 VCS 空间的显著膨胀也可能引发一些难以预料的错误。QGlide 能按 OS 或 Arch 拉取包吗可以。使用依赖项的os与arch字段即可指定拉取的目标平台例如以下配置只在 64 位 Darwin/OSX 系统上拉取- package: some/package os: - darwin arch: - amd64其他 OS/架构下该包不会被拉取。对应源码中 Dependency.Os/Arch 过滤 在扫描阶段即参与判定dependency/scan.go。进一步阅读docs/commands.md全部命令的详细行为docs/glide.yaml.mdglide.yaml字段精讲docs/versions.md语义化版本与范围语法docs/glide.lock.md锁文件设计说明docs/importing.md 与 action/import_godep.go、action/import_gpm.go、action/import_gom.go、action/import_gb.go从其他包管理器导入的实现docs/vendor.md 与 docs/getting-started.mdvendor 机制与快速上手glide.yaml 与 glide.lock仓库自举使用的真实示例最后提醒若你正在启动全新 Go 项目请优先使用 Go 官方 ModulesGlide 更适合用于理解与维护 2015—2019 年间基于 GOPATH vendor 的存量项目其glide.yaml/glide.lock双文件设计与 SemVer 范围语法至今仍是理解 Go 依赖管理演进史的重要参考资料。赞分享开发工具包管理器【免费下载链接】glidePackage Management for Golang项目地址https://gitcode.com/gh_mirrors/gli/glide点击查看免费下载相关推荐Glide 完全指南用 glide.yaml 与 glide.lock 管理 Go 项目的 vendor 依赖Glide 完全指南用 glide.yaml 与 glide.lock 管理 Go 项目的 vendor 依赖 Glide 是 Go 1.5 引入 vendo开发工具包管理器终极Glide配置文件指南掌握glide.yaml与glide.lock的核心用法终极Glide配置文件指南掌握glide.yaml与glide.lock的核心用法 Glide作为Go语言的包管理工具通过 glide.yaml 和 gli开发工具包管理器CANN/ops-nn转置批处理矩阵乘法算子TransposeBatchMatMul 产品支持情况 | 产品 | 是否支持 | | | : :| |Ascend 950PR/Ascend 950DT|√|人工智能算子库深度学习CANNAscend上一篇3步颠覆性数据自主方案如何让微信对话成为你的个人数字资产下一篇如何在macOS上完美使用Xbox控制器360Controller驱动终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

[图像处理][Matlab] strel函数详解:用TaoToken统一Key调试形态学结构元素配置 2026/9/26 3:41:01

[图像处理][Matlab] strel函数详解:用TaoToken统一Key调试形态学结构元素配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
OpenCodex 多智能体 V2 跨提供商任务加密丢失(92)的 upstream 责任判定与追踪实践 2026/9/26 3:41:01

OpenCodex 多智能体 V2 跨提供商任务加密丢失(92)的 upstream 责任判定与追踪实践

【免费下载链接】opencodex Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code 项目地址: https://gitcode.com/gh_mirrors/ope/opencodex 点击…

阅读更多 →
Product Hunt 每日热榜 | 2026-08-04:用 TaoToken 统一 Key 接入 Claude Code 与 Codex 的 settings.json 配置骨架 2026/9/26 3:41:01

Product Hunt 每日热榜 | 2026-08-04:用 TaoToken 统一 Key 接入 Claude Code 与 Codex 的 settings.json 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DeepSeek Harness Windows缓存路径修改与数据迁移指南 2026/9/26 3:41:01

DeepSeek Harness Windows缓存路径修改与数据迁移指南

1. 项目概述:为什么在 Windows 上折腾 DeepSeek Harness 的缓存与迁移?DeepSeek Harness 是 DeepSeek 官方推出的本地智能体编排与运行框架,它不是个简单的聊天窗口,而是一套可插拔、可扩展、支持多智能体协同的轻量级运行时环境。…

阅读更多 →
Nginx 502 Bad Gateway 根因排查与实战修复指南 2026/9/26 3:41:00

Nginx 502 Bad Gateway 根因排查与实战修复指南

1. 这不是服务器“挂了”,而是网关在说“我接不住了”你刚点开一个页面,浏览器冷不丁弹出一行白底黑字:502 Bad Gateway。没有动画,没有加载条,连个友好的错误图标都没有——就这六个字母,像一记闷棍砸在运…

阅读更多 →
R语言科研绘图实战:从数据整理到论文级插图技巧 2026/9/26 3:40:54

R语言科研绘图实战:从数据整理到论文级插图技巧

R语言这工具,我在科研绘图这条路上用了快十年,从最开始被ggplot2的语法折磨到怀疑人生,到现在闭着眼能调出一张Nature风格插图,中间踩过的坑比代码行数还多。但说真的,只要你做科研、写论文、出报告,R语言这…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉