Ryo*_*ota 10 module go go-modules
我知道Go Modules仍然是一个实验性的选择加入功能,也许正因为如此,我找不到关于如何命名目录和packages 的明确指导。
在Go 博客文章中的这些包名称和Effective Go 中的包名称中,他们谈到目录应该与包名称匹配 - 但我不确定 Go Modules 是否会遵循相同的模式。
如果我想将我的业务逻辑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
Run Code Online (Sandbox Code Playgroud)
如果我要使用相同的包名称:
// 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
}
Run Code Online (Sandbox Code Playgroud)
这看起来很容易发生出口冲突——但这很简单。
如果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
}
Run Code Online (Sandbox Code Playgroud)
我应该如何管理由多个文件组成的包?方法 1. 是否合理,尽管它与上面的博客文章和文档有些矛盾?
或者我应该使用方法 2.,遵守约定,并根据需要在main.go?
Ryo*_*ota 10
作为一个 Go 新手,我错误地认为方法 1 是一种可能的方法,因为 Go 确实允许包名称与目录名称不同。
正如Volker在评论中提供的帮助,方法 1绝对不可能。
尝试组合包时,您将直接得到编译错误。
Go Modules 的引入不会影响现有文档中概述的最佳实践,例如:
作为旁注,我还知道包名称应该是单数形式。
这样我就得到了以下结构以及方法 2: