«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как указатели влияют на изменение значений в функциях Go?

Как указатели влияют на изменение значений в функциях Go?

Опубликовано 7 ноября 2024 г.
Просматривать:382

How do pointers affect value modification in Go functions?

Понимание изменения значений с помощью указателей в Go

В Go указатели обеспечивают непрямой доступ и изменение значений. Однако понимание того, как работают указатели, имеет решающее значение при их передаче в функции.

При передаче указателя в функцию возникают два сценария: изменение значения и переназначение указателя.

Сценарий 1 : Изменение значения

Рассмотрите этот код:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}

Здесь функция f получает указатель на структуру Test. Внутри f разыменованному указателю (*p) присваивается новая структура Test со значением 4. Это эффективно изменяет исходную структуру i в основной функции, и на выходе получается 4.

Сценарий 2: Переназначение указателя

Теперь немного изменим код:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &Test{4}
}

В этом случае вместо изменения указанного значения функция переназначает указатель p на новую структуру Test со значением 4. Поскольку p является локальной переменной внутри f, это изменение не влияет на исходная структура i в основной функции, а результат остается равным 2.

Решение: изменение указанного значения

Чтобы изменить указанное значение, мы должны разыменовать указатель и напрямую доступ к члену структуры:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}

Используя p.Value, мы модифицируем поле Value исходной структуры, в результате чего на выходе получается 4.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3