根据Go文档,他们希望你有一个工作区,你应该把他们所有的项目都放进去。 1 然而,据我所知,这一切都会在你崩溃的时候崩溃想要制作一个不使用Go的项目。
以一个项目为例,它由许多微服务组成。让我们说它的结构如下:
app/
authentication/ (Using rust)
users/ (Using NodeJS)
posts/ (Using Go)
只有应用程序的一部分会在Go中编写,并且该部分嵌套在应用程序的子目录中。如何将Go工作空间哲学应用于这种情况?
答案 0 :(得分:7)
每个项目使用不同的GOPATH是一种非常好且简单的方法。根据我的经验,这也比vendor
更好,因为您还可以安装二进制文件并将它们保存在不同的版本中。
vg是一个简单的工具,可以帮助管理工作区,它与您的shell集成,并在您cd
时自动检测工作区。
免责声明:我是该工具的作者之一。
答案 1 :(得分:2)
根据你的go文件设置GOPATH:
GOPATH = $ PROJECT_PATH / app / posts
然后将您的源代码放在
下$ PROJECT_PATH /应用/帖/ SRC /包
答案 2 :(得分:2)
你可以把app /放在$ GOPATH / src中。然后,只要您准备好构建,就可以指定源文件的路径,相对于它们在GOPATH中的位置。
例如:
如果您的应用来源位于~
且您的.go文件位于$GOPATH/src/app/
,那么您可以使用$GOPATH/src/app/posts/
构建一个来源(比如在app / posts /中使用posts.go)或更好go build $GOPATH/src/app/posts/posts.go
,go build posts/posts.go
作为您当前的工作目录。
答案 3 :(得分:2)
从Go 1.11开始,go现在拥有modules。除其他功能外,模块还使您可以在$GOPATH
之外使用隔离的源树(具有任意数量的软件包及其依赖项)。
您可以通过运行go mod init <module name>
创建一个新模块(您必须在$GOPATH/src
之外)。这样会在当前文件夹中创建一个go.mod
文件,并且您在该文件夹(或下面的任何文件夹)中运行的任何go
命令都将使用该文件夹作为您的项目根目录。
您可以在这篇文章中https://aliceh75.github.io/using-modules-for-workspaces-in-golang阅读更多有关将go模块用作工作区的信息(免责声明:我已经写过),并且可以在Go Modules Wiki上阅读有关Go模块的更多信息: https://github.com/golang/go/wiki/Modules