Сравнение значений указателей Голанга - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь выяснить, почему это работает.

У меня есть структура 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 должен быть адресом?

1 Ответ

0 голосов
/ 23 января 2019

Потому что Голанг автоматически разыменовывает указатели.

item.name преобразуется в (*item).name

Как и в случае селекторов , ссылка на неинтерфейсный метод с получателем значения, использующим указатель, автоматически разыменовывает этот указатель : pt.Mv эквивалентен (* pt) .Mv.

Вы можете прочитать все правила в Селекторы Спецификация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...