Ответ
Метод в Go — это функция, которая «привязана» к определённому типу-получателю (receiver). Основное отличие от обычной функции заключается в том, что метод вызывается на экземпляре этого типа и имеет доступ к его данным.
Ключевое отличие:
- Функция:
func DoSomething(args)
— существует сама по себе. - Метод:
func (t MyType) DoSomething(args)
— принадлежит типуMyType
.
Пример:
type Circle struct {
Radius float64
}
// Метод Area для типа Circle. 'c' - это получатель (receiver).
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
func main() {
c := Circle{Radius: 5}
// Метод вызывается через экземпляр структуры
fmt.Println(c.Area())
}
Методы могут иметь два типа получателей:
- Получатель-значение (
(c Circle)
): Метод работает с копией объекта. Изменения внутри метода не повлияют на исходный объект. - *Получатель-указатель (`(c Circle)`):** Метод работает с указателем на объект и может изменять его исходное состояние. Это более эффективно для больших структур, так как не происходит копирования.
// Метод с получателем-указателем
func (c *Circle) Scale(factor float64) {
c.Radius *= factor // Изменяет оригинальную структуру
}