Имя пакета, содержащее дефис
У меня проблемы с пониманием того, почему мой код жалуется, когда в пакете есть дефис. например, если у меня есть имя пакета 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модулям» . Думаю, я могу свободно использовать дефисы при организации структуры каталогов.