Какие плюсы и минусы использования Reserver без Pointer

«Какие плюсы и минусы использования Reserver без Pointer» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Использование receiver без указателя (pointer) в Go имеет свои преимущества и недостатки:

Плюсы:

  • Безопасность: неизменяемость данных, так как метод работает с копией структуры.
  • Потокобезопасность: отсутствие гонок данных при параллельном доступе.
  • Простота: не нужно заботиться о передаче указателей и возможных nil-значениях.

Минусы:

  • Производительность: копирование больших структур может быть затратным.
  • Неизменяемость: невозможность модифицировать оригинальную структуру.

Пример:

type Point struct { X, Y int }

// Value receiver
func (p Point) Move(dx, dy int) Point {
    return Point{p.X + dx, p.Y + dy} // Возвращает новую структуру
}

p := Point{1, 2}
p = p.Move(3, 4) // Оригинальный p не изменился