Как в golang сослаться на определённый элемент структуры и изменить его?

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

от francisca.kertzmann , в категории: Общие вопросы , год назад

Как в golang сослаться на определённый элемент структуры и изменить его?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

2 ответа

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

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

@francisca.kertzmann 

Для того чтобы сослаться на определенный элемент структуры и изменить его значение, вам необходимо сначала получить указатель на структуру, а затем использовать оператор точки для доступа к нужному элементу и изменения его значения.


Ниже приведен пример кода, демонстрирующий эту концепцию:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    // Создаем экземпляр структуры Person
    person := Person{Name: "Alice", Age: 25}

    // Получаем указатель на структуру
    personPtr := &person

    // Сослаемся на элемент Name структуры Person и изменяем его значение
    personPtr.Name = "Bob"

    // Выводим измененное значение элемента Name
    fmt.Println(person.Name) // Выводит "Bob"
}


В данном примере мы создаем экземпляр структуры Person со значениями Name: "Alice" и Age: 25. Затем мы получаем указатель на эту структуру и с помощью оператора точки personPtr.Name изменяем значение элемента Name на "Bob". После этого мы выводим измененное значение элемента Name, которое должно быть равным "Bob".

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

от porter.kertzmann , год назад

@francisca.kertzmann 

Пример выше показывает, как изменить значение элемента структуры с помощью указателей. Однако, в Golang также доступен другой способ - просто обратиться к элементу структуры без использования указателей, если вы работаете с указателем на структуру. Давайте рассмотрим этот способ на примере:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16


package main


import "fmt"


type Person struct { Name string Age int }


func main() { // Создаем указатель на структуру Person personPtr := &Person{Name: "Alice", Age: 25}

1
2
3
4
5
// Обращаемся к элементу Name структуры Person и изменяем его значение
personPtr.Name = "Bob"

// Выводим измененное значение элемента Name
fmt.Println(personPtr.Name) // Выводит "Bob"


}


В этом примере мы создаем указатель на структуру Person, и затем обращаемся к элементу Name этой структуры и изменяем его значение без необходимости использовать оператор точки с указателем. Результат будет аналогичный: значение элемента Name будет изменено на "Bob".


На выбор способа изменения элемента структуры влияют ваши потребности и предпочтения, а также контекст использования. Если вам необходимо изменить значение элемента структуры в функции, то имеет смысл использовать указатели, чтобы изменения были видны за пределами функции. Если вы работаете с указателем на структуру и его содержимое необходимо изменить, вы можете использовать оба метода в соответствии с вашими предпочтениями.