gpt4 book ai didi

go - 如何将一个 Go 模块嵌套在多个 Go 模块中作为本地依赖项

转载 作者:行者123 更新时间:2023-12-01 22:28:08 40 4
gpt4 key购买 nike

$ go version
1.13.3

我的文件夹结构如下:
GOPATH
+---src
+--- my-api-server
+--- my-auth-server
+--- main.go
+--- go.mod
+--- go.sum
+--- my-utils
+--- go.mod
+--- go.sum
+--- uuid
+--- uuid.go
my-auth-server使用 my-api-server/my-utils/uuid作为依赖

我试过移动 my-utils里面 my-auth-server ,但作为图书馆, my-utils将在多个地方使用。

现在, my-utils还有一个 go.mod , 但包含 module宣言。
如果我把它放在 my-auth-server ,模块路径变为 my-api-server/my-auth-server/my-utils
如果我有 2 台服务器,
  • my-auth-server
  • my-session-server

  • 我无法放置 my-utils两者都在里面,因为只能有一个 module根据 go.mod 声明.

    那么,我如何在两个不同的项目中使用它作为子模块呢​​?

    解决此问题的任何帮助也将不胜感激。

    最佳答案

    实现此目的的一种简洁方法是在所有项目之外使用 utils 一个独立模块,然后在任何您想要的地方导入。既然很明显,您希望它本身就是一个模块。


    GOPATH
    +---src
    +--- my-api-server
    +--- my-auth-server
    +--- main.go
    +--- go.mod
    +--- go.sum
    +--- my-utils
    +--- go.mod
    +--- go.sum
    +--- uuid
    +--- uuid.go

    但是,如果您仍然需要将 utils 作为 API 服务器的一部分进行维护,那么将 API 服务器作为模块并将其导入任何需要 utils 包的地方。这是不鼓励的,但不会造成任何伤害,因为 GO 作为编译所需上下文的一部分进行优化。

    像这样
    GOPATH
    +---src
    +--- my-api-server
    +--- my-auth-server
    +--- main.go
    +--- go.mod
    +--- go.sum
    +--- my-utils
    +--- uuid
    +--- uuid.go

    我的理解是您需要在单个仓库中维护多个模块并交叉引用。据我了解,这不是它应该如何工作的,因为您始终可以通过模块相对路径交叉引用嵌套包。

    也许你也知道这一点,但由于你使用的是模块,你需要坐在 GOPATH/GOROOT 中进行解析。

    关于go - 如何将一个 Go 模块嵌套在多个 Go 模块中作为本地依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58473828/

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