我正在尝试编写一些使用指针参数更改结构片段的函数。 我在 GoPlayground 中用这种类型的代码做了一些 Playground ,我发现我有一些错误,但我不知道什么是管理它的最佳方法
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
中的任何东西,我该如何实现类似的东西?
非常感谢!
最佳答案
它改变了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)
Playground :https://play.golang.org/p/UTO1D5zKA0H
关于pointers - 函数指针参数变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55537118/