> Как влияет отсутствие указателей в методах Set и Get на поведение при записи и чтении в Go (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Ютека
Стек: Go
> Пример ответа
Отсутствие указателей в методах Set и Get (т.е. работа с value-ресиверами) приводит к тому, что любые изменения, сделанные внутри Set, применяются к копии структуры, а не к оригиналу. Это означает, что после вызова Set внешняя переменная останется неизменной. Для Get это менее критично - чтение из копии безопасно, но если структура содержит ссылочные типы (слайсы, мапы), то изменения внутри них всё равно отразятся на оригинале, так как копируется только заголовок.
Пример:
GOtype 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 - избыточен, если только не требуется защита от случайного изменения (но это редкий кейс).
> Похожие задачи по backend
Какие типы являются ссылочными в Go
Как вести себя, если коллега предлагает решение, которое, по твоему мнению, не сработает
Как фронтенд должен обрабатывать отсутствие ответа на POST запрос к API
Насколько комфортно совмещать написание кода и наставничество
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью