go - 如何在更改位置时更新导入

标签 go package

我看到在 Go 中您可以直接从 Github 导入包,例如:

import "github.com/MakeNowJust/heredoc"

我知道我在导入行中看到的路径不是 URL,而只是包所在的路径(通常相对于 $GOROOT/src/pkg 或 $GOPATH/src)。所以 heredoc 包很可能位于 $GOPATH/src/github.com/MakeNowJust/heredoc 目录中。

现在假设包开发人员决定将代码库迁移到 Bitbucket。所以现在库 URL 是 bitbucket.com/muchMoreCoolerName/heredoc。他还在代码库中添加了一些新功能。

我的问题是您将如何获得更新后的代码?

我能想到的唯一解决方案是将所有导入更改为新 URL 并再次执行 go get。但是改库更新的代码好像有点不方便。

最佳答案

如果你只是使用 go get 然后导入,没有办法绕过它,你将不得不更新导入路径以获取新代码。但是,如果您使用 vendoring (一种保持对代码的依赖性并与它们一起分发的技术)至少在更新之前,您将与该移动隔离开来。当您想要更新时,您可以使用 vendor 功能来保留旧的导入路径,但与其他存储库同步。

坦率地说,无论如何我仍然会使用 vendoring,当我决定更新时,只需搜索并替换旧的导入路径,这并不难。

编辑 您也可以使用 dep如果您还没有转换到模块,则管理依赖项。

关于go - 如何在更改位置时更新导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53224115/

相关文章:

go - "Cannot use myType as type interface{}"?我以为在 Go 中所有类型都算作 interface{}?

python - 可以导入 python 包,但不能导入其模块

node.js - 创建 NPM 包,如何记录它们?

python - Pip install 忽略 MANIFEST.in 中的文件 - 如何正确构建项目?

R: install.packages 错误:无法打开连接

mongodb 获取最后 30 分钟前插入的项目

go.mod 使用没有标签的模块

go - 如何使用golang编辑云存储桶中对象的元数据信息

go - 当上下文变量超出 golang 的范围时,Context.Done() 是否解除阻塞?

linux - 如何正确编写 Gentoo 的 ebuild