Метод - это функция с получателем (receiver). Объявление метода привязывает идентификатор, имя метода к методу и связывает метод с базовым типом получателя.
MethodDecl = "func" Receiver MethodName Signature [ FunctionBody ] .
Receiver = Parameters .
Получатель указывается в разделе дополнительных параметров, предшествующих имени метода. В этом разделе параметров должен быть объявлен единственный невариантный (non-variadic) параметр - получатель. Его тип должен быть определенного типа T или указателем на определенный тип T. T называется базовым типом получателя. Базовый тип получателя не может быть указателем или типом интерфейса, и он должен быть определен в том же пакете, что и метод. Считается, что метод связан с базовым типом получателя, а имя метода отображается только в селекторах типа T или *T.
Непустой идентификатор получателя должен быть уникальным в сигнатуре метода. Если на значение получателя не ссылаются внутри тела метода, его идентификатор может быть опущен в объявлении. То же самое относится в целом к параметрам функций и методов.
Для базового типа непустые имена связанных с ним методов должны быть уникальными. Если базовый тип является типом структуры (struct type), непустой метод и имена полей должны быть разными.
Дан определенный тип Point, следующие объявления
func (p *Point) Length() float64 {
return math.Sqrt(p.x * p.x + p.y * p.y)
}
func (p *Point) Scale(factor float64) {
p.x *= factor
p.y *= factor
}
привязывают методы Length и Scale с типом получателя *Point к базовому типу Point.
Тип метода - это тип функции с получателем в качестве первого аргумента. Например, метод Scale имеет тип
func(p *Point, factor float64)
Однако функция, объявленная таким образом, не является методом.
Читайте также:
- Основы Go: методы
- Основы Go: методы, получатели и указатели
- Эффективный Go: методы - указатели и значения
Комментариев нет:
Отправить комментарий