2016-08-02 6 views
-1

Когда я получаю структуру из карты в Go, я получаю копию значения? Или я получаю фактическое значение, которое находится на карте?Поиск карты golang по значению или по ссылке?

Например, скажем, у меня есть карта от струн до структур:

type quality struct { 
    goodness int 
    crunchiness int 
} 
cookies := make(map[string]quality) 
cookies["nutrageous"] = quality{goodness: 3, crunchiness: 10} 

и я хочу изменить запись.

Могу ли я рассчитывать на то, что возвращаемое значение будет таким же, как на карте?

c := cookies["nutrageous"] 
c.goodness += 5 

Или мне также нужно вернуться и изменить, что находится на карте?

c := cookies["nutrageous"] 
c.goodness += 5 
cookies["nutrageous"] = c 
+2

Как есть _are_ нет ссылок в ответе, очевидно: по значению. – Volker

+1

Я отлично открываю это, так как вы приняли ответ (мысль о закрытии будет препятствовать продолжению downvotes). Основная причина ответов одна и та же, поэтому хорошо понять, почему ваш пример не может работать, когда значение на карте не адресуется в первую очередь. – JimB

+0

Таким образом, я нахожусь с вами на одном и том же ответе, и даже эти вопросы связаны с тем же недостатком информации. Но знания о SO должны быть проиндексированы под вопрос, и это разные индексы - наличие обоих вопросов, даже если они указывают на один и тот же ответ, все равно добавляет ценность сайту. – Brendan

ответ

6

Индексирование карты возвращает копию значения карты. Если значение карты является структурой, то изменения возвращаемого значения структуры не изменят значение структуры на карте. Вам нужно будет присвоить измененное значение карте.

Если значение является указателем на структуру, то изменения структуры будут доступны через карту.

 Смежные вопросы

  • Нет связанных вопросов^_^