Pointers Golang指针值比较

Pointers Golang指针值比较,pointers,go,Pointers,Go,我想弄明白为什么会这样 我有一个项目结构 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]

我想弄明白为什么会这样

我有一个项目结构

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会起作用?

,因为Golang已经自动取消了指针的引用

item.name
转换为
(*item.name

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

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