Имя пакета, содержащее дефис

У меня проблемы с пониманием того, почему мой код жалуется, когда в пакете есть дефис. например, если у меня есть имя пакета foo-bar, и я объявляю это имя пакета

package foo-bar

foo-bar/config.go:1:13: expected ';', found '-'

Тогда почему компилятор Go жалуется? Означает ли это, что мы не должны использовать дефисы в именах пакетов go?

Поскольку во многих репозиториях используется дефис в имени пакета, я что-то делаю не так?

3 ответа

Решение

Из спецификации Go видно, что имя пакета должно быть допустимым идентификатором:

PackageName = идентификатор.

Далее мы можем прочитать, что действительный идентификатор определяется как:

идентификатор = буква {буква | unicode_digit}.

Таким образом, имена пакетов могут содержать только буквы и цифры. - символы не разрешены.

Далее мы можем прочитать это как частный случай, когда символ подчеркивания (_) определяется как буква для идентификаторов Go:

Символ подчеркивания _ (U+005F) считается буквой.

Так что вы можете заменить - с участием _ для имени вашего пакета, если хотите.

Однако, пожалуйста, не делайте этого, поскольку это считается неидиоматическим. Для получения совета по именованию пакетов в Go, пожалуйста, прочтите раздел Effective Go об именах пакетов или прочтите сообщение в блоге Go об именах пакетов.

Из сообщения в блоге Go Package Name:

Стиль имен, типичный для другого языка, может не быть идиоматическим в программе Go. Вот два примера имен, которые могут быть хорошим стилем для других языков, но не подходят для Go:

  • computeServiceClient
  • priority_queue

Если в адресе вашей посылки - в имени вы можете указать имя вашего пакета с подчеркиванием.

Пример:

адрес файла пакета: some/where/foo-bar/config.go

package foo_bar

// your codes

Хотя это и не связано напрямую, по какой-то причине при создании макета проекта я продолжаю искать, существуют ли правила или рекомендации относительно наименования части «пути» в модулях go. В я нашел немного, кроме «Есть также несколько лексических ограничений на символы, разрешенные в путях к Справочнике по модулям Goмодулям» . Думаю, я могу свободно использовать дефисы при организации структуры каталогов.

Другие вопросы по тегам