我想弄清楚为什么会这样。我有一个项目结构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 会起作用?
1 回答
函数式编程
TA贡献1807条经验 获得超9个赞
因为 Golang 已经自动解引用了指针。
item.name
转换为(*item).name
与选择器一样,使用指针对具有值接收器的非接口方法的引用将自动解除对该指针的引用:pt.Mv 等同于 (*pt).Mv。
- 1 回答
- 0 关注
- 81 浏览
添加回答
举报
0/150
提交
取消