Map в Go: неупорядоченность, запись в nil и отсутствие конкурентной безопасности
Карта в Go — хеш-таблица со ссылочной семантикой: передавая её в функцию, вы передаёте доступ к тем же данным. Три свойства регулярно оказываются сюрпризом. Порядок обхода намеренно случаен: рантайм начинает range со случайной позиции, чтобы никто не полагался на порядок; нужен детерминизм — собирайте и сортируйте ключи. Нулевая карта равна nil, читать из неё можно (вернётся нулевое значение), а запись вызывает панику — поэтому карту создают через make или литералом. Карта не безопасна для конкурентного доступа: одновременные запись и чтение из разных горутин рантайм обнаруживает сам и аварийно завершает программу с concurrent map writes. Ещё две детали: получение отсутствующего ключа возвращает нулевое значение, поэтому существование проверяют формой v, ok := m[k]; и адрес элемента карты взять нельзя — &m[k] не компилируется.