我知道Go Modules仍然是一个实验性的选择加入功能,也许正因为如此,我找不到关于如何命名目录和package
s 的明确指导。在Go 博客文章中的
这些包名称和Effective Go 中的包名称中,他们谈到目录应该与包名称匹配 - 但我不确定 Go 模块是否会遵循相同的模式。
如果我想将我的业务逻辑与许多文件捆绑在一起,创建子目录并保持相同的包名package business
是否合理?validators/
package business
someDir
├── business
│ ├── businessA.go // package business
│ ├── businessB.go // package business
│ ├── businessC.go // package business
│ └── validators
│ ├── businessValidatorX.go // package business, or validators?
│ ├── businessValidatorY.go // package business, or validators?
│ └── businessValidatorZ.go // package business, or validators?
├── go.mod // module example.com
└── 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
?