【问题标题】:Golang pointer value comparisonGolang指针值比较
【发布时间】:2019-01-25 20:19:11
【问题描述】:

我正在试图弄清楚为什么会这样。

我有一个 Item 结构

type item struct {
    name string
    someOtherValue int 
}

和另一个结构

type someStruct struct {
    items []item
}

我有一个函数,我想循环并更新值。

func (s someStruct) update() {
    for i := range s.items {
         item := &s.items[i]

        if item.name == “Something” {
            doSomething(item)
        }
    }
}

当我将项目传递给 doSomething 函数时,它将更新该地址处的项目(按计划工作)。

我的问题是,如果 item 应该是地址,为什么 item.name 有效?

【问题讨论】:

    标签: pointers go


    【解决方案1】:

    因为 Golang 具有自动取消引用的指针。

    item.name 转换为(*item).name

    与选择器一样,使用指针对具有值接收器的非接口方法的引用将自动取消引用该指针:pt.Mv 等价于 (* pt).mv.

    您可以阅读Selectors规范中的所有规则

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2012-07-01
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多