Я читаю исходный код карты в go1.10.3 . Казалось, существует соответствующий метод для операции, такой как:
makemap(t *maptype, hint int, h *hmap) *hmap ==> m = make(map[xx]yy)
mapaccess1(t *maptype, h *hmap, key unsafe.Pointer)==> m['key']
но я не могу найти соответствующий метод для операции, которая добавляет ключ / значение, как показано ниже:
m['xx']='yy'
существует метод mapassign, который имеет некоторое сходство с этим
работа.
mapassign(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer
это добавит новый ключ к карте, но, как мы видим, входные аргументы не имеют значения . И еще один вопрос: когда у него уже есть этот ключ, он может обновлять этот ключ.
if !alg.equal(key, k) {
continue
}
// already have a mapping for key. Update it.
if t.needkeyupdate {//why??
typedmemmove(t.key, k, key)
}
, поскольку два ключа равны, зачем его обновлять?
Резюме:
1. связь между операцией добавления ключа / значения и методом mapassign ?
2. почему может потребоваться обновить ключ, поскольку ключ вставки и ключ, который уже существует, равны в методе mapassign?