Golang 工作区实践
Golang Workspaces In Practice
根据 Go 文档,他们希望您有一个工作区,您应该将他们的所有项目都放入其中。1 然而,据我所知,这一切都落空了一旦您想创建一个不专门使用 Go 的项目,请立即分开。
以一个由许多微服务组成的项目为例。假设它的结构如下:
app/
authentication/ (Using rust)
users/ (Using NodeJS)
posts/ (Using Go)
应用程序只有一部分会用 Go 编写,并且该部分嵌套在应用程序的子目录中。我将如何将 Go 工作区理念应用于这种情况?
根据你的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
根据 Go 文档,他们希望您有一个工作区,您应该将他们的所有项目都放入其中。1 然而,据我所知,这一切都落空了一旦您想创建一个不专门使用 Go 的项目,请立即分开。
以一个由许多微服务组成的项目为例。假设它的结构如下:
app/
authentication/ (Using rust)
users/ (Using NodeJS)
posts/ (Using Go)
应用程序只有一部分会用 Go 编写,并且该部分嵌套在应用程序的子目录中。我将如何将 Go 工作区理念应用于这种情况?
根据你的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