使用 git 设置正确的 Golang 目录结构以在自定义包上使用 go build
Setting up proper Golang directory structure with git to use go build on custom packages
所以我已经为此绞尽脑汁好几个星期了,在阅读了一些关于 $ go build
的工作原理及其三个神奇目录的资料后,/bin
、/pkg
, /src
,我仍然不太清楚如何使用自定义包构建 Golang 项目以及如何管理 git 存储库。
让我更详细地解释一下我的情况:
我正在与默认 .../user/go/...
不同的项目目录中处理 Go 项目。对于我所有的项目,我有一个不同的目录树,其结构如下:
projects
| project-a
| project-b
| docs
| media
| scrum
| project-b <-- git repo containg Go structure
| .git
| gitignore.txt
| bin
| pkg
| src
| custom-package-a
| | foo.go
| custom-package-b
| | bar.go
| | main.go
| project-c
我的 projects
目录可以包含任何类型的项目:java、Unity3D、VisualC# 等...然后在其下的每个项目中它包含一个带有源代码的 repo。
我最近能够通过将 projects/project-b/project-b
添加到我的 GOPATH 中来成功构建,因此它可以看到 src 目录。
这是典型 Go 项目的文件结构的样子吗,即使它构建正确?
在我的 GOPATH 中,我删除了 user/go
的原始路径,只使用了项目目录。当从 github 安装其他包时,它们会包含在 repo 中,因为 GOPATH 没有在其他任何地方设置,所以我的 repo 有这些不同的子模块。 将外部包安装到存储库中是明智之举,还是应该将它们放入不同的 go 目录?我担心这可能会使存储库变得混乱。
我可以包括
我需要知道我是否正确使用自定义包。我的意图是在我的代码库中采用面向对象的方法,并且我将每个包都视为 class。 制作自定义包以将它们视为 class 是明智之举吗? 我发现有必要避免函数和变量之间的同名冲突。示例:package-a.GetThing()
、package-b.GetThing()
。这两个函数产生相似(不完全)的输出,但使用不同的数据集并需要不同的实现。
当我使用 go build
时,我的控制台在 projects/project-b/project-b/
并且它工作正常。如果我在 src.
中移动 main.go
也是一样
一个问题是 Go 构建器奇怪地将编译后的二进制文件放在我从中调用 go build
的同一目录中。 不应该 go build
将它放在 bin
目录中,还是我需要在使用命令时强制执行输出路径? 我知道 GOBIN , 但它似乎不起作用。
从 Go 1.11 开始,您不需要使用 $GOPATH。
您可以使用 go mod init [your repo]
和 运行 go install
或 go build
将为您下载 deps 和 go.mod
和 go.sum
文件将被创建以跟踪部门。
看看这个 README
所以我已经为此绞尽脑汁好几个星期了,在阅读了一些关于 $ go build
的工作原理及其三个神奇目录的资料后,/bin
、/pkg
, /src
,我仍然不太清楚如何使用自定义包构建 Golang 项目以及如何管理 git 存储库。
让我更详细地解释一下我的情况:
我正在与默认 .../user/go/...
不同的项目目录中处理 Go 项目。对于我所有的项目,我有一个不同的目录树,其结构如下:
projects
| project-a
| project-b
| docs
| media
| scrum
| project-b <-- git repo containg Go structure
| .git
| gitignore.txt
| bin
| pkg
| src
| custom-package-a
| | foo.go
| custom-package-b
| | bar.go
| | main.go
| project-c
我的 projects
目录可以包含任何类型的项目:java、Unity3D、VisualC# 等...然后在其下的每个项目中它包含一个带有源代码的 repo。
我最近能够通过将 projects/project-b/project-b
添加到我的 GOPATH 中来成功构建,因此它可以看到 src 目录。
这是典型 Go 项目的文件结构的样子吗,即使它构建正确?
在我的 GOPATH 中,我删除了 user/go
的原始路径,只使用了项目目录。当从 github 安装其他包时,它们会包含在 repo 中,因为 GOPATH 没有在其他任何地方设置,所以我的 repo 有这些不同的子模块。 将外部包安装到存储库中是明智之举,还是应该将它们放入不同的 go 目录?我担心这可能会使存储库变得混乱。
我可以包括
我需要知道我是否正确使用自定义包。我的意图是在我的代码库中采用面向对象的方法,并且我将每个包都视为 class。 制作自定义包以将它们视为 class 是明智之举吗? 我发现有必要避免函数和变量之间的同名冲突。示例:package-a.GetThing()
、package-b.GetThing()
。这两个函数产生相似(不完全)的输出,但使用不同的数据集并需要不同的实现。
当我使用 go build
时,我的控制台在 projects/project-b/project-b/
并且它工作正常。如果我在 src.
main.go
也是一样
一个问题是 Go 构建器奇怪地将编译后的二进制文件放在我从中调用 go build
的同一目录中。 不应该 go build
将它放在 bin
目录中,还是我需要在使用命令时强制执行输出路径? 我知道 GOBIN , 但它似乎不起作用。
从 Go 1.11 开始,您不需要使用 $GOPATH。
您可以使用 go mod init [your repo]
和 运行 go install
或 go build
将为您下载 deps 和 go.mod
和 go.sum
文件将被创建以跟踪部门。
看看这个 README