git - 使用 git 设置正确的 Golang 目录结构以在自定义包上使用 go build

标签 git go package file-structure gopath

因此,在阅读了关于如何 $ go build 的几个来源之后,我已经为此挠头好几个星期了。作品及其三个魔法目录,/bin , /pkg , /src ,我仍然不太清楚如何使用自定义包构建 Golang 项目以及应如何管理 git 存储库。

让我更详细地解释一下我的情况:

我正在与默认目录不同的项目目录中处理 Go 项目 .../user/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 有这些不同的子模块。 将外部包安装到 repo 中是明智之举,还是应该将它们放入不同的 go 目录?我担心这可能会使 repo 变得困惑。

我可以包括

我需要知道我是否正确使用自定义包。我的意图是在我的代码库中采用面向对象的方法,并且我将每个包都视为一个类。 制作自定义包以将它们视为类是一件明智的事情吗?我发现有必要避免函数和变量之间的同名冲突。示例:package-a.GetThing() , package-b.GetThing() .这两个函数产生相似(不完全)的输出,但使用不同的数据集并需要不同的实现。

我的控制台在 projects/project-b/project-b/当我使用 go build它工作正常。如果我移动也一样 main.go内部 src.

一个问题是 Go 构建器奇怪地将编译后的二进制文件放在我调用的同一目录中 go build从。 不应该go build将它放在 bin 中目录,还是在使用命令时我需要强制执行输出路径?我知道 GOBIN,但它似乎不起作用。

最佳答案

从 Go 1.11 开始,您不需要使用 $GOPATH。

您可以使用 go mod init [your repo] 并运行 go installgo build 将为您下载 deps 并将创建一个 go.modgo.sum 文件来跟踪部门。

看看这个 README

关于git - 使用 git 设置正确的 Golang 目录结构以在自定义包上使用 go build,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53562130/

相关文章:

git - 使用 "git svn",我可以在获取时忽略特定的 Git 提交吗?

python - 如何在 Go 语言中使用经过训练的 Scikit Learn Python 模型?

macos - 防火墙阻止 Go 开发服务器

oracle - 在 Oracle 包体中使用 Pragma

java - java中用户定义包的访问方法

java - 如何从作为字符串给出的 java 代码中解析包?

在没有主分支的情况下创建的 Git 存储库

git - 为什么最近, git rebase -i squash 导致头部分离

git - 重新设置一个分支,包括它的所有子分支

templates - 访问html模板golang中许多结构的 slice 中的结构变量