#go #methods #identifier
#Вперед #методы #идентификатор
Вопрос:
Я только начал изучать golang, и во время чтения спецификации я обнаружил некоторый вопрос, который я не могу решить самостоятельно. В разделе об объявлении метода в спецификации языка говорится: «Если базовый тип является типом struct, непустые имена методов и полей должны быть разными».
https://golang.org/ref/spec#Method_declarations
Как я понял, метод с пустым именем
func (t T) _() {
// some cool code
}
Итак, как я могу это использовать и какова основная цель таких методов?
Комментарии:
1. Я не думаю, что в Go есть что-то подобное. Попробуйте создать пример внутри игровой площадки.
2. @apxp По крайней мере, этот код скомпилирован
3. @apxp go сгенерируйте создать пустую функцию, по крайней мере, для интерфейса stringer
Ответ №1:
Нет реальной цели иметь пустые имена методов, и вы не можете вызывать их каким-либо образом (даже через отражение, они не будут отображаться среди (экспортируемых) методов типа, см. На Go Playground). Это просто явно не запрещено спецификацией языка.
Имя метода:
MethodName = identifier .
Имя метода может быть любым, что является допустимым идентификатором:
identifier = letter { letter | unicode_digit } . letter = unicode_letter | "_" . unicode_letter = /* a Unicode code point classified as "Letter" */ . unicode_digit = /* a Unicode code point classified as "Number, decimal digit" */ .
Фраза «непустые имена методов и полей должны быть разными» просто означает, что имена методов (и полей) должны быть разными, но вы можете добавить 2 отдельных пустых метода, они не сталкиваются. У пустых методов нет имени, которое могло бы столкнуться с чем-либо, включая другие пустые методы.