Как изменять данные структуры через адрес в golang?

Пользователь

от roxanne.hauck , в категории: Golang , 2 года назад

Как изменять данные структуры через адрес в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от rebekah , 2 года назад

@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".

Пользователь

от margaret , год назад

@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.