Value receivers и pointer receivers — это два разных способа определить методы для типов в Go. Ключевое отличие в том, что метод получает либо копию значения, либо ссылку на оригинал.
Value receiver создаёт копию оригинального значения при вызове метода. Это значит:
Pointer receiver работает со ссылкой на оригинальное значение. Это значит:
type Counter struct {
count int
}
// Value receiver - не изменяет оригинал
func (c Counter) Increment() {
c.count++
}
// Pointer receiver - изменяет оригинал
func (c *Counter) IncrementPtr() {
c.count++
}
Это отличие — фундаментальное в дизайне Go и влияет на то, как методы работают с твоими данными.
Метод с value receiver может изменять поля исходной структуры, потому что Go автоматически передаёт ссылку, когда receiver адресуемый.
Новый — ещё не проверен сообществом
Вы