Допустим, у меня есть потрясающий бинарный файл Go, который денормализует некоторые данные, и я хотел бы поместить его в:
//some/path/denormalize/
В идеале мое имя пакета будет denormalize
, что позволит мне следоватьруководящие принципы для «[при] разработке пакета, рассмотрите, как две части квалифицированного идентификатора работают вместе, а не только имя члена».Таким образом, потенциальная функция-член может быть denormalize.FromX(...)
.Однако, если я помещу main.go
для денормализованного двоичного файла в пакет denormalize/
, я не смогу использовать имя предполагаемого пакета, поскольку теперь пакет будет называться main
.
Некоторые варианты, которые я рассмотрел:
- Поместите
main.go
в denormalize/
, а затем поместите оставшуюся часть кода в internal/
или api/
или pkg/
.Плюсы: похоже, это то, что делает большинство людей.Минусы: имя пакета не имеет смысла и нарушает принцип обеспечения совместной работы двух частей классификатора, поскольку api.FromX(...)
больше не имеет смысла.Это приводит к более подробным именам, таким как api.DenormalizeFromX(...)
. - . Поместите
main.go
в denormalize/main/
, а остальную часть кода в denormalize/
.Плюсы: название пакета остается значимым.Минусы: тогда подкаталог имеет зависимость от родительского каталога, который имеет некоторый запах кода.
Есть ли другие варианты, которые я не учел, где разместить main.go так, что он не будетзаставить меня использовать другое имя пакета?