Я понимаю, Модули Go все еще являются экспериментальной функцией подписки, и, возможно, из-за этого я не могу найти четкого руководства о том, как называть каталоги и package
s.
В этих Имена пакетов в Go Blog post и Имена пакетов в 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
?