pointers - 函数指针参数变化

标签 pointers go

我正在尝试编写一些使用指针参数更改结构片段的函数。 我在 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/

相关文章:

C++ 被此代码与多态性、指针和对象切片混淆

go - 在 go 中读取 windows 属性

go - JetBrains Gogland :A fatal error has been detected by the Java Runtime Environment:A fatal error has been detected by the Java Runtime Environment:

c++ - 编译cpp文件时出错

c++ - 为什么我会从 'int'到 'int*'的无效转换错误以及其他错误?

C - 函数内结构数组的多个 malloc

objective-c - 在方法中,指针或实际对象是否作为参数传递?

go - 同步原语原子包

http - 是否可以从 http Handle 函数写入 channel ?

go - 如何直接在空接口(interface)上调用String方法?