Копирование в Go
Присваивание структуры копирует все поля, а не связывает два имени. Вторая переменная получает снимок значений на момент записи. Если потом менять поле в одной переменной, в другой остается старое содержимое этого поля.
Скопируем пользователя и изменим возраст только в первой переменной:
type User struct {
Name string
Age int
}
u := User{Name: "ann", Age: 20}
twin := u
u.Age = 21
fmt.Println(u.Age)
fmt.Println(twin.Age)
На экране 21 и 20. Имена совпадают,
но числа разошлись, потому что twin хранит
свою копию полей. Так же ведут себя поля строки
и логического типа внутри структуры.
Проверим копию после смены строки:
type User struct {
Name string
Age int
}
a := User{Name: "bob", Age: 30}
b := a
a.Name = "bobby"
fmt.Println(b.Name)
Дана структура:
type User struct {
Name string
Age int
}
u := User{Name: "ann", Age: 20}
Скопируйте u в twin, измените
Age в u на 99 и выведите
возраст в обеих переменных.
Даны переменные:
type Pair struct {
X int
Y int
}
one := Pair{X: 1, Y: 2}
Запишите one в two, поставьте
X в one равным 10
и выведите two.X.
Скажите, изменится ли поле Name у копии,
если поменять его только в оригинале после
присваивания структуры целиком.