Back to questions
Principal
1
Что такое ресивер (receiver) в Go, какие они бывают, для чего используются?
Companies where asked
BetBoom
Answer from AI
sobes.tech AI
В языке Go ресивер (receiver) — это параметр метода, который указывает, к какому типу он принадлежит. Ресивер позволяет определить метод для конкретного типа (структуры или другого пользовательского типа).
Ресиверы бывают двух видов:
- Значение (value receiver) — метод получает копию значения типа. Изменения внутри метода не влияют на оригинал.
- Указатель (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.