【问题标题】:how to reference a package in another package having GO111MODULE=on in go如何在 go 中引用另一个具有 GO111MODULE=on 的包中的包
【发布时间】:2021-10-26 21:58:55
【问题描述】:

如果我有以下结构:

HelperFolder
    Library1
        lib1.go
    Library2
        lib2.go
        file2.go

lib1.go 在哪里导入 Library2。

我已经在 library2 中执行了 go mod init,然后 go mod tidy 然后 go build,一切都很好。 但我无法构建 Library1。

我不想安装任何库,或将库放在 gopath 中(我已将 HelperFolder 放在不同的路径中)但我在构建 library1 时总是收到错误,即 package2 不在 GOROOT(C:\程序文件\go\src\package2)

我错过了什么?

感谢任何帮助

【问题讨论】:

  • 在引用其他未托管的模块时,您需要在 Library1 的 go.mod 中使用 replace 指令。例如replace Library2 => ../Library2require 之后。
  • @Zyl 感谢您的帮助。我使用了类似“go mod edit replace HelperFolder/Lib2 => D:\folderPath\HelperFolder\Lib2”,然后“go get HelperFolder/Lib2”之类的东西,这就解决了这个问题。

标签: go package


【解决方案1】:

一个 Go 模块可能包含许多包。定义多个模块的主要原因是您可以按单独的发布计划对这些模块中的包进行版本控制和发布。对于仅限本地(未发布、未版本化)的包,使用单个统一模块几乎总是更简单。

即:在HelperFolder 中只运行一次go mod init,而不是在单个Library 文件夹中运行两次。

【讨论】:

    【解决方案2】:

    正如@Zyl 在他的评论中所说,我使用了以下 go 命令:

    go mod edit replace HelperFolder/Lib2 => D:\folderPath\HelperFolder\Lib2
    

    然后

    go get HelperFolder/Lib2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2019-11-02
      • 2016-12-04
      • 2013-02-18
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      相关资源
      最近更新 更多