Будет напечатано Bob и Bob. changeName переназначает локальную копию указателя, но не меняет объект, на который указывает переменная в main.
Как изменяется значение указателя при его переназначении внутри функции
Будет напечатано Bob и Bob. changeName переназначает локальную копию указателя, но не меняет объект, на который указывает переменная в main.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Каким будет вывод программы?
type Person struct {
Name string
}
func changeName(person *Person) {
person = &Person{
Name: "Alice",
}
}
func main() {
person := &Person{
Name: "Bob",
}
fmt.Println(person.Name)
changeName(person)
fmt.Println(person.Name)
}
Ответ
Будет напечатано Bob и Bob. changeName переназначает локальную копию указателя, но не меняет объект, на который указывает переменная в main.
Для изменения исходного объекта достаточно person.Name = "Alice". Если нужно заменить именно адрес, верните *Person и присвойте результат снаружи либо используйте **Person. Передача указателя по значению позволяет менять объект через него, но не сам указатель вызывающей функции.