为了账号安全,请及时绑定邮箱和手机立即绑定

将具有多个程序的 GOPATH repo 转换为 GO 模块

将具有多个程序的 GOPATH repo 转换为 GO 模块

Go
繁花不似锦 2022-12-26 10:45:21
我们有一个使用旧 GOPATH 结构的旧 git 存储库。该存储库包含多个实用程序的代码,每个实用程序都有自己的 main.go。此外,它还包含一个带有多个子文件夹的“公共”文件夹,每个子文件夹都具有各种共享位功能。结果是这样的:progOne\main.go (and other code, some in subfolders)progTwo\main.go (and other code, some in subfolders)progThree\main.go (and other code, some in subfolders)common\net\ (go files, but no main)common\colors\ (go files, but no main)common\resources\ (go files, but no main)在将其转换为 go 模块时,我可以将所有这些留在一个用于生成多个可执行文件的 git 存储库中吗?如果是,哪个子文件夹需要包含 go.mod 文件?编辑:感谢@colm.anseo 的全面回复。这可能是一个单独的问题,但由于它密切相关,所以我会在这里问。一旦我按照建议在 repo 的根目录中创建了一个 go.mod 文件,我就在 VSCode 中打开了根文件夹。我想调试“ProgOne”,所以我设置了这样的启动配置:{   "name": "Launch Package",   "type": "go",   "request": "launch",   "mode": "debug",   "program": "${workspaceFolder}/progOne/main.go",   "buildFlags": ""}但是当我尝试启动调试器时,构建失败:Starting: /Users/me/dev/go/bin/dlv dap --check-go-version=false --listen=127.0.0.1:58867 --log-dest=3 from /Users/me/dev/convoy/myRepo/progOneDAP server listening at: 127.0.0.1:58867Build Error: go build -o /Users/me/dev/convoy/myRepo/progOne/__debug_bin -gcflags all=-N -l ./main.gomain.go:20:2: no required module provides package git.acme.com/myRepo/common/colors; to add it:    go get git.acme.com/myRepo/common/colors(exit status 1)我同时运行了“go mod tidy”和“go get git.acme.com/myRepo/common/colors”,但这并没有解决问题。我不希望其中任何一个是必要的,因为有问题的模块是这个存储库的一部分。我需要做什么才能使该导入工作?
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

我可以将所有这些留在一个用于生成多个可执行文件的 git 存储库中吗?


是的。


如果是,哪个子文件夹需要包含 go.mod 文件?


正如@Peter 指出的那样 - 只有您需要版本的那些。


只是go mod init如果您不确定 - 如果生成的路径不正确,请提供模块路径。


奖励建议,如果您正在对该目录进行版本控制,请通过 git 标签标记您的个人目录。您可以对包(非主)目录或可执行(主)包执行此操作。


如果需要,这将允许用户安装特定版本的可执行文件。


可执行文件的 git 标签示例:


progOne/v0.1.0

progTwo/v0.2.5

progThree/v0.3.4

用户可以像这样安装特定版本:


go install github.com/me/myrepo/progOne@v0.1.0

或用于@latest获取最新版本。


如果包需要特定版本的依赖包,请像这样标记它们:


common/net/v0.1.2

common/colors/v0.3.5

common/resources/v0.5.9

对于依赖于这些的每个可执行文件,您将go get使用所需的版本执行一个(这将依次更新go.mod)


正如您从上面看到的那样,标签应该与目录名称匹配 - 然后以SemVer 结尾

有关模块标记的信息,请参阅官方博客文章Publishing Go Modules


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信