【问题标题】:Go function pointer issue [duplicate]Go函数指针问题[重复]
【发布时间】:2017-12-03 08:49:32
【问题描述】:

我有一个结构

type keeper struct {
    ptr int32
}

然后我给它添加一个函数

func(l keeper) next() {
  l.ptr++
}

但是当我创建一个新的 keeper 并调用 next()

tester := keeper {
  ptr: 0,
}
test.next()

看来我没有在测试仪中修改 ptr 值。如果我将函数更改为指针,则它可以工作

func(l *keeper) next() {
  l.ptr++
}

为什么会这样?

【问题讨论】:

标签: pointers go


【解决方案1】:

在 Go 中,方法只是一个接收类型实例的函数。如果您的函数接收一个实例作为值,则该值本质上是该实例的副本,它将是您的函数的本地副本,并且您对该实例所做的任何更改都不会对原始实例进行。如果您的函数接收到一个指向实例的指针,那么您所做的任何更改都将直接针对原始实例进行。

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2016-07-01
    • 2013-03-11
    • 2021-05-22
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多