Golang指针值比较

时间:2019-01-23 02:50:07

标签: pointers go

我正试图弄清楚它为什么起作用。

我有一个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.name应该是地址,为什么item.name起作用?

1 个答案:

答案 0 :(得分:3)

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

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

  

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

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

相关问题