Golang中集中存放所有语言的Git仓库是否属于不良实践

Golang中集中存放所有语言的Git仓库是否属于不良实践 我的团队在工作中有个统一目录,用来存放所有语言的Git仓库。

例如目录名称为"git",在git目录下包含所有Git仓库:“some-python-project”、“some-powershell-project”、“golang_project”、"golang_project2"等等…

但我发现这对Go语言来说存在问题。据我了解,对于Go语言,最佳实践是为多个项目设置一个统一目录(这样每个不同的项目都位于该目录下的src文件中)。

我的理解正确吗?我应该把我的Golang项目放在这个"git"目录之外吗?

3 回复

随着Go 1.12版本正式引入模块机制,这种开发方式正逐渐成为主流实践。现在您可以将Go项目存放在任意位置。

我非常赞赏这一变革,使我们不再需要依赖Go工作区。

不过您描述的扁平化层级结构在我看来有些混乱且缺乏组织性。

个人而言,我更倾向于为每个客户创建独立文件夹,并在其中为每个项目建立单独的子文件夹。

// 示例代码块
func main() {
    fmt.Println("hello world")
}

更多关于Golang中集中存放所有语言的Git仓库是否属于不良实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


对于所有Golang项目,如果您使用Go模块且项目位于GOPATH之外,就不会有问题。带有模块(go.mod文件)的项目现在是首选的开发方式。

只有当您的GOPATH指向通用工作目录(git)时,才会遇到个别情况的问题。这会混淆go命令,因为您提到的"单一目录"机制是旧的开发方法。是的,您所经历的痛苦正是Go模块发布的原因。

如果您想了解更多关于模块实现的信息,https://github.com/golang/go/wiki/Modules将是一个很好的起点。实现起来相当容易。

在 Go 语言中,项目目录结构确实有特定的最佳实践,这主要与 GOPATH 环境变量相关(尽管 Go 1.11 之后引入了 Go Modules,但目录组织仍影响依赖管理)。你的集中式 Git 目录结构可能不符合 Go 的标准,原因如下:

  1. GOPATH 要求:在传统 Go 工作区中,Go 代码应位于 GOPATH/src 目录下,其中 src 包含每个项目的子目录(例如 GOPATH/src/github.com/user/project)。如果你的 Git 目录不在 GOPATH 内,Go 工具链(如 go buildgo get)可能无法正确解析导入路径,导致构建错误。

  2. Go Modules 的影响:从 Go 1.11 开始,Go Modules 允许在任意目录管理项目,但如果你使用旧版 Go 或依赖基于 GOPATH 的工作流,集中目录可能引发问题。即使使用 Modules,如果项目结构不清晰,也可能在依赖解析时出现冲突。

  3. 潜在问题:将 Go 项目放在一个非标准目录中(如你的 git 目录)可能导致:

    • 导入路径不一致:Go 期望导入路径映射到目录结构,例如 import "github.com/user/project" 应对应于 GOPATH/src/github.com/user/project。如果你的目录不匹配,需要额外配置。
    • 工具链错误:go getgo install 等命令可能无法自动下载或构建依赖项。
    • 协作困难:团队成员如果使用标准 Go 设置,可能无法直接克隆和运行你的项目。

示例代码说明: 假设你的当前结构如下:

git/
  some-python-project/
  golang_project/
  golang_project2/

而你的 GOPATH 设置为 /home/user/go。在传统 GOPATH 模式下,Go 项目应位于 /home/user/go/src/golang_project。如果你尝试从 git/golang_project 构建,可能会遇到导入错误。

例如,在 git/golang_project/main.go 中:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World")
}

如果你在 git/golang_project 目录运行 go build,而该目录不在 GOPATH 中,Go 可能无法解析标准库以外的导入(尽管现代 Go 版本可能通过 Modules 处理,但最好遵循标准)。

建议行动

  • 如果使用 Go Modules(Go 1.11+),你可以在任意目录初始化项目,但建议将 Go 项目移出集中 Git 目录,并单独管理。例如,为每个 Go 项目创建独立目录,并使用 go mod init 初始化。
  • 如果使用 GOPATH,将 Go 项目移动到 GOPATH/src 下的相应路径(如 GOPATH/src/github.com/yourname/golang_project)。

总之,虽然技术上可以在集中目录中存放 Go 项目,但为了兼容性和工具链支持,最好将 Go 项目放置在标准位置。这能避免潜在构建问题,并简化依赖管理。

回到顶部