@dev2expert

Как правильно заполнять карты в go?

Есть вот такой тип:
map[int]map[int]map[int]int
Для хранения такой структуры данных:
-- [ id ]
------ [ group_id ]
---------- [ item_id ]
-------------- [ quantity ]
---------- [ item_id ]
-------------- [ quantity ]
---------- [ item_id ]
-------------- [ quantity ]
------ [ group_id ]
---------- [ item_id ]
-------------- [ quantity ]
--[ id ]
------ [ group_id ]
---------- [ item_id ]
-------------- [ quantity ]

Как правильно добавлять group_id в такие карты?

Сейчас я делаю что-то вроде этого:
if _, ok := my_map[group_id]; !ok {
    my_map[group_id] = make(map[int]int)
}
my_map[group_id][item_id] = quantity

а потом уже my_map добавляется в глобальную карту, такой код мне кажется слишком страшным, может есть лучшие практики для работы с такими данными?

Возможно ли это реализовать только срезами?
  • Вопрос задан
  • 460 просмотров
Решения вопроса 2
@SilentFl
В го есть ООП, пользуйтесь им. Выделите отдельно свой Item, Group и прочее хотя бы так
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
Хэши типа ваших имеют смысл только в очень критичных по производительности на чтение местах. Если это так - ваш код вполне оптимален. Да, выглядит стремно, но скорость будет высокая, при условии, что вы выбираете по конкретным ключам, а не перебором.
В противном случае - лучше таки на структурах (если хотите сэкономить чутка на памяти - указателях на структуры).
Пример, что привел SilentFl - вполне ок.

Не забывайте, что слайсы / мапы - опасны потому, что передаются по ссылке и в случае конкурентного доступа - у вас будет каша из данных. Посему данные храним в приватных переменных и наружу торчата геттеры/сеттеры с sync.RWMutex
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Я в полнейшем восторге! Структура просто сказочная!!!
По теме: разрешаю!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 нояб. 2021, в 20:09
20000 руб./за проект
30 нояб. 2021, в 19:40
4000 руб./за проект
30 нояб. 2021, в 19:32
40000 руб./за проект