> Как влияет отсутствие указателей в методах Set и Get на поведение при записи и чтении в Go (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Ютека

Стек: Go

> Пример ответа

Отсутствие указателей в методах Set и Get (т.е. работа с value-ресиверами) приводит к тому, что любые изменения, сделанные внутри Set, применяются к копии структуры, а не к оригиналу. Это означает, что после вызова Set внешняя переменная останется неизменной. Для Get это менее критично - чтение из копии безопасно, но если структура содержит ссылочные типы (слайсы, мапы), то изменения внутри них всё равно отразятся на оригинале, так как копируется только заголовок.

Пример:

GO
type User struct {
Name string
}
func (u User) SetName(name string) {
u.Name = name // меняется копия
}
func (u User) GetName() string {
return u.Name // читается из копии
}
func main() {
u := User{Name: "Alice"}
u.SetName("Bob")
fmt.Println(u.GetName()) // "Alice" - изменение не применилось
}

Для корректного изменения состояния используйте указатели: func (u *User) SetName(name string). В противном случае Set будет бесполезен, а Get - избыточен, если только не требуется защита от случайного изменения (но это редкий кейс).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью