Go Modules-目录和包的命名约定

时间:2018-11-21 01:40:34

标签: go module go-modules

我了解Go Modules仍是一项试验性的选择加入功能,也许正因为如此,我无法找到有关如何命名目录和package的明确指南。
在这些Package names in Go Blog帖子和Package name in Effective Go中,他们谈到该目录应与程序包名称匹配-但我不确定Go Modules是否遵循相同的模式。

如果我想将我的业务逻辑捆绑在package business中并包含许多文件,那么创建子目录validators/并保持相同的程序包名称package business是否合理?

someDir
├── business
│   ├── businessA.go // package business
│   ├── businessB.go // package business
│   ├── businessC.go // package business
│   ├── go.mod      // module example.com/business
│   └── validators
│       ├── businessValidatorX.go // package business, or validators?
│       ├── businessValidatorY.go // package business, or validators?
│       └── businessValidatorZ.go // package business, or validators?
└── main.go

方法1。

如果我要使用相同的软件包名称:

// main.go
package main

import (
        "example.com/business"
        "example.com/business/validators"
)

// both imports would be combined to the same `business` package?
func main() {
        b := business.SomeLogic()
        business.ValidateX(b) // validator from the same package
}

这似乎容易导致出口冲突-但很简单。

方法2。

如果validators/路径映射到package validators,那么使用的代码将如下所示。

// main.go
package main

import (
        "example.com/business"
        "example.com/business/validators"
)

func main() {
        b := business.SomeLogic()
        validators.ValidateX(b) // validator from a separate package
}

我应该如何管理包含许多文件的软件包?方法1.是否合理,尽管与上面的博客文章和文档有些矛盾?
还是应该采用方法2,遵守约定,并根据需要在main.go中添加别名?

1 个答案:

答案 0 :(得分:1)

方法2是正确的。

作为Go的新手,我错误地认为方法1是一种可能的方式,因为Go允许包名称不同于目录名称。

Volker在评论中提供了帮助,方法1 绝对不可能
尝试合并软件包时,会直接出现编译错误。

compilation error

Go模块的引入不会影响现有文档中概述的最佳实践,例如:

作为旁注,我还知道包名称应为单数形式。

因此,剩下的就是以下结构以及方法2

structure following the convention