gpt4 book ai didi

用于多个包的 Go 模块,新的主要编号 >1

转载 作者:行者123 更新时间:2023-12-01 22:14:06 25 4
gpt4 key购买 nike

我正在尝试迁移现有的 Go 项目以使用模块,但在制定正确的目录结构时遇到了困难。该 repo 包含两个常规包(p1、p2)以及演示如何使用这些包的示例程序。我正在使用 Go 1.13。

目前的布局是

<reponame>
|
+--- p1
| |
| +-- p1a.go
| +-- p1b.go
|
+--- p2
| |
| +-- p2a.go
| +-- p2b.go
|
+-- examples
|
+-- e1.go (which refers to packages p1 and p2)


github 存储库已经公开,版本标记 > 1。我知道我需要一个新的主编号 v5,所以看起来我需要在包路径中的某个位置使用 v5。

但是应该是 <repo>/v5/p1<repo>/p1/v5 ? go.mod 文件在哪里?我怀疑我需要一个来覆盖这两个包,一个用于示例程序。

我能找到的版本 > 1 的所有示例似乎在模块中只有一个包。

重要的是,我如何让示例编译和运行?我已经为示例尝试了 go.mod 文件的各种排列,但即使使用“replace”指令尝试指向本地,它们也总是失败并出现“查询'v5'没有匹配的版本”之类的错误目录。

在我完成本地测试之前,它似乎期望已经将 v5 版本的代码发布到 github。

最佳答案

  • 模块是关于版本控制的。如果 p1、p2 和 example 一起进行版本控制,则将 go.mod 放在 repo 级别。这可能就是你想要的。
  • 确保模块正确声明自己,即 go.mod 文件中的 module <repo>/v5
  • 您不需要文件系统路径中的 v5。基本上有三种方式:包含 v5 内容的 v5 文件夹,包含 v5 内容的 v5 分支,或者两者都没有,在这种情况下,您的 repo 将仅是 v5。
  • 确保导入路径正确。例如。在包示例中,您必须通过 import "<repo>/v5/p1" 导入 p1。 (对于 p2 甚至 p1 导入 p2 等也是如此)

  • 就这样。
    cd 进入示例文件夹和 go build :Go 将在文件系统树中查找 go.mod 并在 repo 根目录中找到它。因此它知道这个包属于模块 <repo>/v5,因此可以从模块 <repo>/v5 中找到所有包,并且可以在不需要任何替换指令的情况下导入 <repo>/v5/p1。像这样,您可以在 v5 上本地工作,而无需推送到远程仓库。

    (一个常见的错误是没有将模块声明为 v5:在 go.mod 文件中,您必须有一行 module github.com/<user>/<repo>/v5 。如果您错误地只写了模块 github.com/<user>/<repo> ,那么在编译例如示例时,编译器会认为“嗯, examples 包属于模块 github.com/<user>/<repo>,我应该导入 github.com/<user>/<repo>/v5/p1,所以让我们看看 github.com//看看我们在那里找到了什么......”并且找不到任何东西并提示。)

    关于用于多个包的 Go 模块,新的主要编号 >1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61499696/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com