主要依赖项更新后更新go模块导入引用
场景:我需要跨存储库将第三方Go模块更新为新的主要版本 示例:主要依赖项更新后更新go模块导入引用,go,Go,场景:我需要跨存储库将第三方Go模块更新为新的主要版本 示例:github.com/google/go-github/v20togithub.com/google/go-github/v24 更新go.mod和go.sum后,如何以编程方式更新存储库中的所有import语句以匹配 以下是一个简单的方法,但不是傻瓜式的: find*.go-type f-print0 | xargs-0 sed-i''s/“github.com\/google\/go github\/v20/“github.com
github.com/google/go-github/v20
togithub.com/google/go-github/v24
更新go.mod
和go.sum
后,如何以编程方式更新存储库中的所有import
语句以匹配
以下是一个简单的方法,但不是傻瓜式的:
find*.go-type f-print0 | xargs-0 sed-i''s/“github.com\/google\/go github\/v20/“github.com\/google\/go github\/v24/g'
这将捕获所有字符串实例,而不仅仅是import
(尽管这不一定是坏事)。但我担心的是,更新可能从github.com/abc/def
到github.com/abc/dev/v2
,例如,可能还有一个名为github.com/abc/def core
的模块
请注意,这个问题并不是为了捕捉“您可能有不稳定的更改,需要更新您的代码”yada yada-这是一个单独的主题,在这里没有被问到。因为新的主要版本表明破坏了兼容性,所以您必须手动修复代码:在出现新的主要版本的情况下更新导入路径是您最不需要自动化的问题 一个好的自动化解决方案是,它可以自动添加、删除或更改
*.go
代码和go.mod
中所需的/vN
使用您的示例,它应该能够将您的代码从使用github.com/google/go-github/v20
更新为使用github.com/google/go-github/v24
从存储库:
动机
有两个很好的用例可以做到这一点:
*.go
代码和客户端的go.mod
中的/vN
来使用模块的不同主版本
换句话说,如果您是从v2
到v3
的模块的作者,则可以使用此实用程序,如果您是从v2
到v3
的模块的消费者,也可以使用此实用程序
它使用诸如
golang.org/x/tools/go/ast/astutil
之类的包来操作*.go
源代码的ast,以更新导入路径,因此不应受到您对使用sed
表达的担忧类型的影响。没有人说会直接提交此代码。查找和更新可能发生更改的文件是非常好的第一步。你在这里投的反对票和不回答票正是他们在这里描述的: