在实际开发中怎么才能在vendor下这样进行"软连接"一个开源的三方库?

我们在GitHub经常看到有这样的结构:
在三方库下面依赖一个三方库:
image.png

我们可以看到这里就像一个软连接一样加载的三方库(还指定了版本)

请问我们在实际开发中如何这样做到呢?
比如,在VSCode中我怎么才能在vendor下这样进行"软连接"一个开源的三方库?
这个叫什么操作呢(应该有一个专业名词来描述此功能)?

阅读 992
avatarAI BotBETA

在实际开发中,将开源的三方库“软连接”到项目的vendor目录(或者任何自定义的目录)通常指的是使用某种形式的符号链接(在Unix/Linux系统中)或者类似的功能(在Windows系统中)。然而,在现代的Go语言项目中,更常见的做法是使用依赖管理工具(如depglidegovendorgo modules等)来管理项目的依赖。

从Go 1.11版本开始,官方推荐使用go modules来管理依赖。go modules允许你定义项目的依赖项,并将它们存储在项目的go.modgo.sum文件中,而不是将它们复制到vendor目录。但是,如果你确实需要将依赖项复制到vendor目录,你可以使用go mod vendor命令。

但是,你的问题中的描述似乎指的是某种版本的软连接,这在Go中并不直接支持。不过,你可以通过以下步骤来模拟这种行为:

  1. 使用go get安装或更新依赖项

    go get github.com/someuser/somepackage@v1.2.3

    这将下载并安装指定版本的包到Go的GOPATHGOBIN目录下的pkg/mod目录中。

  2. 创建vendor目录(如果尚未存在):

    mkdir -p vendor
  3. 使用ln -s(在Unix/Linux系统上)创建符号链接
    由于Go不支持在vendor目录下直接创建对pkg/mod中包的符号链接,你需要手动复制或创建占位符文件,并可能需要在构建过程中进行特殊处理。但是,如果你只是想在文件系统级别模拟这种行为,你可以这样做(注意,这通常不推荐用于Go项目,因为它可能不会被Go的构建系统识别):

    ln -s $GOPATH/pkg/mod/github.com/someuser/somepackage@v1.2.3 vendor/github.com/someuser/somepackage

    但是,请注意,$GOPATH/pkg/mod的结构可能会随着Go的版本和依赖管理工具的不同而有所变化,因此上述路径可能需要根据实际情况进行调整。

  4. 在Windows上模拟符号链接
    在Windows上,你可以使用mklink命令来创建符号链接或目录链接(类似于Unix/Linux的ln -s)。但是,请注意,Windows的文件系统对符号链接有一些限制,并且可能需要管理员权限来创建它们。

专业名词

  • 在Unix/Linux系统中,这种链接通常被称为符号链接(Symbolic Link)或软链接(Soft Link)。
  • 在Windows系统中,类似的功能是通过目录链接(Directory Junction)或符号链接(Symbolic Link)来实现的。
  • 在Go的上下文中,使用go mod vendor将依赖项复制到vendor目录的行为被称为vendoring。但是,这不是软连接,而是物理复制。

最后,再次强调,对于Go项目,通常建议使用go modules来管理依赖项,而不是手动创建符号链接或复制文件到vendor目录。

2 个回答

这个在git上是 submodule,你找下相关资料,可以在你自己的仓库下添加别的库作为自己的子module

推荐问题
logo
Microsoft
子站问答
访问
宣传栏