Sobes.tech
Back to questions
Principal
1

Что такое ресивер (receiver) в Go, какие они бывают, для чего используются?

Companies where asked
BetBoom

Answer from AI

sobes.tech AI

В языке Go ресивер (receiver) — это параметр метода, который указывает, к какому типу он принадлежит. Ресивер позволяет определить метод для конкретного типа (структуры или другого пользовательского типа).

Ресиверы бывают двух видов:

  1. Значение (value receiver) — метод получает копию значения типа. Изменения внутри метода не влияют на оригинал.
  2. Указатель (pointer receiver) — метод получает указатель на значение. Позволяет изменять состояние объекта и избегать копирования больших структур.

Используются ресиверы для реализации методов, что позволяет создавать поведение для типов, поддерживать интерфейсы и организовывать код более объектно-ориентированно.

Пример:

package main
import "fmt"

type Counter struct {
    count int
}

// Метод с указательным ресивером изменяет состояние
func (c *Counter) Increment() {
    c.count++
}

// Метод со значимым ресивером не изменит оригинал
func (c Counter) Display() {
    fmt.Println(c.count)
}

func main() {
    c := Counter{count: 5}
    c.Increment()  // изменит c.count
    c.Display()    // выведет 6
}

Таким образом, ресиверы — это способ связать методы с типами в Go.