猿问

Golang 指针值比较

我想弄清楚为什么会这样。


我有一个项目结构


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


PIPIONE
浏览 82回答 1
1回答

函数式编程

因为 Golang 已经自动解引用了指针。item.name转换为(*item).name与选择器一样,使用指针对具有值接收器的非接口方法的引用将自动解除对该指针的引用:pt.Mv 等同于 (*pt).Mv。
随时随地看视频慕课网APP

相关分类

Go
我要回答