我正试图弄清楚它为什么起作用。
我有一个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起作用?
答案 0 :(得分:3)
因为Golang具有自动取消引用的指针。
item.name
转换为(*item).name
与选择器一样,通过指针使用值接收器对非接口方法的引用将自动取消引用该指针:pt.Mv等效于(* pt).Mv。
您可以阅读Selectors规范中的所有规则