Comments 6
Закончился очередной курс вайтишников?
иногда хочется сделать ключом два значения, но не хочется объявлять дополнительно структуры. для этого может оказаться полезным в качестве ключа указать массив. например:
m := map[[2]any]string{}
m[[2]any{"user", 111}] = "Alice"
m[[2]any{"user", 222}] = "Bob"
println(m[[2]any{"user", 222}])
а если еще добавить в качестве мини-утилиты функцию
func key2(a, b any) [2]any {
return [2]any{a, b}
}
то можно писать так: m[key2("user", 111)] = "Alice"
иногда бывает полезным.
а то частенько встречал код, где делают мапы мапов %)
и тут я замечаю кое-что интересное :) не думал что ключом может быть массив из any
- т.к. any
ведь может быть и не сравнимым типом. попробовал заменить 222
на слайс - обламывается в рантайме. т.е. он не только при компиляции проверяет что ключ валидного типа. любопытно, спасибо!
а насчет ключа из двух значений - в скриптовых языках я обычно объединяю два значения в строчку чтобы сделать ключ - например, часто когда ключом надо координату сделать:
m[x .. ":" .. y] = 100
Про порядок ключей и печать мапы - можно уточнить, пакет fmt сам сортирует мапу по ключу при формировании mapString, поэтому обычный fmt.Print(m) всегда будет печатать "отсортированную" мапу. Видел подобный вопрос на каком-то из моков, возможно кому-то пригодится)
Добрый день! Вы так интересно описываете. Хотелось бы видеть у вас больше статей про Go.
Вопросы по мэпам (map) в Go