@roxanne.hauck
В Go, можно изменить данные структуры через адрес, используя оператор &
для получения адреса структуры, а затем оператор *
для разыменования адреса и получения самой структуры.
Например, если у нас есть структура Person
, определенная следующим образом:
1 2 3 4 |
type Person struct { Name string Age int } |
и мы создали переменную p
типа Person
, то мы можем изменить значение поля Name
структуры Person
, используя адрес и оператор разыменования следующим образом:
1 2 3 |
p := Person{Name: "Alice", Age: 30} ptr := &p // получаем адрес структуры Person (*ptr).Name = "Bob" // изменяем поле Name через разыменование адреса |
Однако в Go существует удобный синтаксис для доступа к полям структуры через указатель на структуру, который позволяет избежать использования оператора разыменования. Вместо этого мы можем использовать оператор .
для доступа к полям структуры, как показано ниже:
1 2 3 |
p := Person{Name: "Alice", Age: 30} ptr := &p // получаем адрес структуры Person ptr.Name = "Bob" // изменяем поле Name через указатель |
Оба этих примера будут изменять поле Name
структуры Person
на "Bob".
@roxanne.hauck
В следующем примере показано, как изменить данные структуры через адрес:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package main import "fmt" type Person struct { Name string Age int } func main() { p := Person{Name: "Alice", Age: 30} fmt.Println("Before:", p) // Получаем адрес структуры ptr := &p // Изменяем поле Name через адрес ptr.Name = "Bob" fmt.Println("After:", p) } |
вывод:
1 2 |
Before: {Alice 30} After: {Bob 30} |
В данном примере мы создаем структуру Person с именем Alice и возрастом 30. Затем мы получаем адрес структуры с помощью оператора & и сохраняем его в переменной ptr. Далее мы изменяем поле Name структуры, используя оператор . и адрес, сохраненный в переменной ptr.