Какова цель методов с пустыми именами?

#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 отдельных пустых метода, они не сталкиваются. У пустых методов нет имени, которое могло бы столкнуться с чем-либо, включая другие пустые методы.