Golang 工作区实践

Golang Workspaces In Practice

根据 Go 文档,他们希望您有一个工作区,您应该将他们的所有项目都放入其中。1 然而,据我所知,这一切都落空了一旦您想创建一个不专门使用 Go 的项目,请立即分开。

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

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

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


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

根据你的go文件设置GOPATH即可:

GOPATH=$PROJECT_PATH/app/posts

然后把你的源代码放在

$PROJECT_PATH/app/posts/src/package

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

例如:

如果您的应用源代码在 $GOPATH/src/app/ 中,而您的 .go 文件在 $GOPATH/src/app/posts/ 中,那么您可以构建一个源代码(假设 posts.go 在 app/posts/ 中)使用 go build $GOPATH/src/app/posts/posts.go 或更好的 go build posts/posts.go,使用 app/ 作为您当前的工作目录。

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

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

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

从 Go 1.11 开始,go 现在有 modules。除其他外,模块使您能够在 $GOPATH.

之外拥有独立的源代码树(具有任意数量的包和它们自己的依赖项)

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

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