Изменения параметров указателя функции - PullRequest
0 голосов
/ 05 апреля 2019

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

package main

import "fmt"

type Person struct {
    name string
}

func doSomething(person *Person) {
    person.name = "John"
}
func main() {
    var persons []Person
    p := Person{name:"David"}
    persons = append(persons, p)
    doSomething(&p)
    fmt.Println(persons)    
}

doSomething ничего не меняет в persons, как я могу реализовать что-то подобное?

Большое спасибо!

1 Ответ

2 голосов
/ 05 апреля 2019

Изменяется p, но значение в persons является копией p, а не указателем на p (как вы можете увидеть, напечатав p: https://play.golang.org/p/4b5fhdtuR8R). Если вы используйте указатели, и вы получите то, что ищете:

var persons []*Person
p := &Person{name: "David"}
persons = append(persons, p)
doSomething(p)
fmt.Println(persons[0])
fmt.Println(p)

Детская площадка: https://play.golang.org/p/UTO1D5zKA0H

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