【问题标题】:How to update imports when they change location更改位置时如何更新导入
【发布时间】:2018-11-09 18:55:59
【问题描述】:

我看到在 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。但是更改库更新的代码似乎有点不方便。

【问题讨论】:

  • 是的,更新导入行就是答案。根据托管原始文件的主机,可能会设置重定向,以允许两个名称同时工作。通常,这仅适用于单个平台上的重命名(即 github.com/foo/bargithub.com/foo/baz)。

标签: go package


【解决方案1】:

如果您只是使用 go get 然后导入,则无法绕过它,您必须更新导入路径以获取新代码。但是,如果您使用vendoring(一种使您的代码保持依赖关系并与它们一起分发的技术),至少在您更新之前,您将与该移动隔离。当您想要更新时,您可以使用供应商功能来保留旧的导入路径,但要与其他 repo 同步。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2016-11-26
    • 2013-12-21
    相关资源
    最近更新 更多