【问题标题】:Golang Workspaces In Practice实践中的 Golang 工作区
【发布时间】:2016-07-03 02:54:21
【问题描述】:

根据 Go 文档,他们希望您有一个工作区,您应该将他们的所有项目都放入其中。1 但是,据我所知,这一切一旦您想做一个不专门使用 Go 的项目。

以一个由许多微服务组成的项目为例。假设它的结构是这样的:

app/
    authentication/ (Using rust)
    users/ (Using NodeJS)
    posts/ (Using Go)

只有一部分应用程序会用 Go 编写,并且该部分嵌套在应用程序的子目录中。我如何将 Go 工作空间理念应用于这种情况?


  1. https://golang.org/doc/code.html#Workspaces

【问题讨论】:

  • 如果您将应用程序放入 GOPATH 中,它将正常工作。
  • 正如@kostya 所说,由于 Go 有一个依赖于 $GOPATH 的依赖管理,我会将 app/ 放入 GOPATH。否则,将包包含在 posts/ 中并使用相对导入。

标签: go workspace microservices


【解决方案1】:

为每个项目使用不同的 GOPATH 是一种非常好的和简单的方法。根据我的经验,这也比vendor 效果更好,因为您还可以安装二进制文件并将它们保存在不同的版本上。

vg 是一个帮助管理工作区的简单工具,它与您的 shell 集成,并在您cd 时自动检测工作区。

免责声明:我是该工具的作者之一。

【讨论】:

    【解决方案2】:

    从 Go 1.11 开始,Go 现在有 modules。除此之外,模块使您能够在$GOPATH 之外拥有独立的源代码树(包含任意数量的包及其自身的依赖项)。

    您可以通过运行go mod init <module name> 创建一个新模块(您必须在$GOPATH/src 之外才能执行此操作)。这将在当前文件夹中创建一个go.mod 文件,并且您在该文件夹(或下面的任何文件夹)中运行的任何go 命令都将使用该文件夹作为您的项目根目录。

    您可以在这篇文章中阅读更多关于使用 go 模块作为工作区的信息:https://aliceh75.github.io/using-modules-for-workspaces-in-golang(免责声明:我写的),您可以在 Go Modules Wiki 上阅读更多关于 Go 模块的信息: https://github.com/golang/go/wiki/Modules

    【讨论】:

      【解决方案3】:

      你可以把 app/ 放在 $GOPATH/src 中。然后,无论何时准备好构建,都指定源文件的路径,相对于它们在 GOPATH 中的位置。

      例如:

      如果您的应用程序源位于 $GOPATH/src/app/ 并且您的 .go 文件位于 $GOPATH/src/app/posts/ 中,那么您可以使用 go build $GOPATH/src/app/posts/posts.go 或更好的 go build posts/posts.go 构建源(比如说 post.go 在 app/posts/ 中) app/ 作为您当前的工作目录。

      【讨论】:

        【解决方案4】:

        只需根据你的 go 文件设置 GOPATH:

        GOPATH=$PROJECT_PATH/app/posts

        然后把你的源代码放在下面

        $PROJECT_PATH/app/posts/src/package

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-21
          • 2011-03-13
          • 2022-06-10
          • 2010-09-22
          • 2020-01-17
          • 1970-01-01
          相关资源
          最近更新 更多