2019-01-23 02:50 阅读 260


I’m trying to figure out why this works.

I have an Item struct

type item struct {
    name string
    someOtherValue int 

and another struct

type someStruct struct {
    items []item

I have a function where I want to loop through and update the values.

func (s someStruct) update() {
    for i := range s.items {
         item := &s.items[i]

        if == “Something” {

When I pass item to the doSomething function, it will update the item at that address (works as planned).

My question is, why does work if item supposed to be an address?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    doushu5805 doushu5805 2019-01-23 03:36

    Because Golang has automatically dereferenced pointers. is converted to (*item).name

    As with selectors, a reference to a non-interface method with a value receiver using a pointer will automatically dereference that pointer: pt.Mv is equivalent to (*pt).Mv.

    You can read all the rules in Selectors specification

    点赞 评论 复制链接分享