Go Modules - соглашение об именах каталогов и пакетов - PullRequest
0 голосов
/ 21 ноября 2018

Я понимаю, Модули 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?

1 Ответ

0 голосов
/ 23 ноября 2018

Подход 2 верен.

Будучи новичком в Go, я ошибочно думал, что Подход 1 был одним из возможных способов, поскольку Go позволяет использовать имя пакета, отличное от имени каталога.

Как Фолькер помог в комментариях, подход 1 определенно невозможен .
При попытке объединить пакеты вы получите прямую ошибку компиляции.

compilation error

Введение модулей Go не влияет на лучшие практики, изложенные в существующих документах, таких как:

В качестве дополнительного примечания я также узнал, что имя пакета должно иметь форму единственного числа.

Так что я оставлю следующую структуру вместе с Подход 2 :

structure following the convention

...