Какова цель методов с пустыми именами? - PullRequest
3 голосов
/ 21 апреля 2019

Я только начал изучать golang, и во время чтения спецификации я нашел вопрос, который сам не могу решить.В разделе об объявлении метода спецификация языка гласит: «Если базовый тип является структурным типом, непустые методы и имена полей должны различаться.»

https://golang.org/ref/spec#Method_declarations

Как я понял, метод с пустым именем -

func (t T) _() {
  // some cool code
}

Итак, как его использовать и какова основная цель таких методов?

1 Ответ

7 голосов
/ 21 апреля 2019

Нет реальной цели иметь пустые имена методов, и вы не можете вызывать их каким-либо образом (даже через отражение, они не будут отображаться среди (экспортируемых) методов типа, см. * 1001). * 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 отдельных пустых метода, они не конфликтуют. У пустых методов нет имени, которое могло бы конфликтовать с чем-либо, включая другие пустые методы.

...