项目结构和提交 golang 项目

问题描述

TL;DR:为什么我在路径中命名带有网站的 go 项目,以及我在哪里初始化该路径中的 git? ELI5,请。

我很难理解文件/文件夹/存储库结构的基本目的和使用以及项目/应用程序在 go 语言中的约定。我看过一些帖子,但他们没有回答我关于使用/功能的首要问题,我就是不明白。我猜需要 ELI5。

为什么这么多项目的路径写成:

github.com/project1/goLangProj
gitlab.com/project2/goLangProj2
example.com/hello

项目repo的开头是网站有什么原因吗?我有点明白,也许有多个项目,而且它们都将转到那些 repo 托管站点之一,但否则我不完全明白目的。当我想提交一个项目时,它让我感到困惑,然后该项目在存储库中以该名称命名,不是吗?我在某种程度上也在寻找超出项目提交范围的用例,例如希望下载和使用该项目的人,这两种观点都是如此。

除了推理和目的之外,如果我们做到了这一点,那么我将在该路径中的哪个文件夹中初始化 git 项目?

如果有我可能找不到的完整解释,请与我分享,我会继续讨论,在此先感谢您。

解决方法

为什么我要在路径中命名带有网站的项目?

如果您的包与其他人的包具有完全相同的导入路径,那么有人将很难尝试在同一项目中使用这两个包,因为导入路径不是唯一的。只要每个人都使用等于他们有效“拥有”的 URL 的字符串,例如您的 GitHub 帐户(或实际拥有,例如您自己的域),那么这些名称冲突就不会发生(除了 URL 的所有权这一事实可能会随着时间而改变)。

它还可以更轻松地go get您的项目,因为主机位置是导入字符串的一部分。使用该包的每个源文件还会告诉您从何处获取它。这是一个很好的财产。

我在哪里初始化 git?

您的项目应该有一些根文件夹,其中包含项目中的所有内容,并且没有项目之外的任何内容。在此目录中初始化 git。如果它是一个 Go 项目,那么在这里初始化你的 Go 模块也是很常见的。

您可能会因尝试托管代码的位置而限制将 git root 放在何处。例如,如果托管在 GitHub 上,则您推送的所有代码都必须进入存储库。这意味着您可以将 git root 放在包含所有存储库的更高目录中,但是没有办法(据我所知)将其实际推送到远程。请记住,您的本地文件系统与远程主机的文件系统不同。您可能有一个名为 github.com/myname/ 的本地文件夹,但这并不意味着远程端支持将文件写入这样的位置。