Sobes.tech
Junior

Was zeigt der folgende Code an und warum? package main import "fmt" 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) }

sobes.tech KI

Antwort von AI

Код выведет:

Bob
Bob

Объяснение:

В функции changeName параметр person — это локальная копия указателя на структуру Person. Когда внутри функции person переназначается на новый адрес &Person{Name: "Alice"}, это изменение касается только локальной копии указателя, а не оригинального указателя, переданного в main.

Таким образом, в main переменная person продолжает указывать на исходный объект с именем "Bob".

Чтобы изменить имя оригинального объекта, нужно изменить поле через указатель, например:

func changeName(person *Person) {
    person.Name = "Alice"
}

Тогда вывод будет:

Bob
Alice