Дмитрий
структуру
как уложить в структуру map[string]map[int]Form где Form - простая структура из 3 полей?
Андрей
в go мапа до 16(точно не помню) элементов принудительно рандомится чтобы небыло таких вопросов
Aleksandr
как уложить в структуру map[string]map[int]Form где Form - простая структура из 3 полей?
так и уложи. string ключ - поле структуры. а int ключ невалиден для json (кажется) - надо конвертировать в строку
Андрей
сделай в структуре поле которе не мапится на json типа []string и храни там ключи в нужном порядке
Дмитрий
Отсортируй ключи, ты ж сам проблему обозначил.
да мне не нужна сортировка. мне нужно просто передать json с ключами ровно в том же порядке в котором они добавлялись в мапу
Pavel
Ordered dict придумали супер давно
Daniel
но в go его нет
Pavel
Ну вот я и предлагаю его реализовать
Daniel
(и это сочетание мапы и массива, так-то)
Pavel
Или найти готовое
Vyacheslav
а где хранится?
нигде, но ты можешь, как уже писали, создать массив, куда будешь добавлять ключи, а вот там они как раз будут находиться в порядке добавления
Daniel
но, вообще, задача дурацкая
Мерль
(и это сочетание мапы и массива, так-то)
не всегда Если я не путаю, в питоне например этого добились применяя хитрый алгоритм хэширования
Daniel
зачем это может быть нужно-то?
Pavel
Решение есть, осталось только код написать, че обсуждать то дальше
Мерль
зачем это может быть нужно-то?
если тебе дали интерфейс, спроектированный гениями
Daniel
все равно
Daniel
не верю, что бывают анмаршалеры, которым не все равно на порядок
Дмитрий
зачем это может быть нужно-то?
пишу апишечку. фронт выводит данные в порядке в котором они приходят в json
Pavel
Лол.
Artem
лол
Pavel
Ну тут я соглашусь с Даниелем.
Pavel
Вы ставите костыль.
Artem
я бы тапком такому фронту дал
Aleksandr
в мапе не хранится порядок ключей, в котором они добавлялись
насколько помню, рандомный вывод задается только при переборе специально, а внутри оно все же упорядоченно
Дмитрий
ну так используйте массив, а не мапу, да и все
не могу потому что данные map[string][string]CustomStruct
Daniel
тут вариантов два
Daniel
то есть три, но третий - фуфло
Nikita
насколько помню, рандомный вывод задается только при переборе специально, а внутри оно все же упорядоченно
Мапа как структура данных не гарантирует последовательное расположение. Когда мапа маленькая, оно, конечно, может лежать в последовательности, но она в любой момент времени может поменяться (при вставке, удалении). Го же дополнительно еще и рандомайзит, чтобы недопрограммисты никогда не рассчитывали на порядок вставки
Zver
Маршалите сами тогда.
Artem
но корень зла у всех один
Aleksandr
не могу потому что данные map[string][string]CustomStruct
данные которые у вас в приложении не обязаны быть один к одному к из представлению на фронте. Перепакуйте
Evgeniy
Всем привет. https://www.ozon.ru/context/detail/id/34671680/ старая книжка или лучше свежее найти?
Aleksandr
Всем привет. https://www.ozon.ru/context/detail/id/34671680/ старая книжка или лучше свежее найти?
для старта пойдет. Особо нового ничего не появилось
Daniel
1. изменить структуру на []map[string][string]CustomStruct 2. добавить к ключам префикс вроде 00001-, чтобы они сортировались как вам хочется
Daniel
3. костылить ordered dictionary
Дмитрий
всем спасибо за советы.
🏁Александр
есть упорядочные мапы 🙂
🏁Александр
на кастом типах народ развлекается
🏁Александр
где то у меня в каком то парсере юзалось
Daniel
угу
🎉
как сохранить порядок ключей из мапа при маршалинге в json?
Если есть закономерность можно отсортировать.
Roman
a := []int {1, 2, 3} c := a[0] c это копия?
Илья
да
Vadim
Чойта копия
Roman
да
почему мы тогда можем провернуть такой прикол? https://goplay.space/#2KBFmt9VofV
Vadim
Это слайс
Vadim
С андерлаинг аррэем
Roman
Это слайс
c это слайс?)
Roman
потому, что &a[0] - это не копия
ну не, постой.. в моём понимании того как устроены операторы и коллекции в C++.. [] то это всего лишь функция, которая возвращает копию того, что нашла по индексу i
Roman
следственно, если в Go это реализовано подобным путём, тогда [0] должен вернуть копию, а &[0] должен взять адрес копии, а не самого item'а
Vadim
Известный паттерн получения слайса из массива c := a[:]
Daniel
Roman
это в твоем понимании - c := a[0] - создать новую переменную с - тип и значение взять из a[0]
ну тогда c должен быть указателем но взять адрес у указателя и поменять знечение указателя не должно опять-же поменять данные
Roman
или они там мудрят на уровне компиля?
Daniel
коллега
Roman
и slice'ы в язык встроены ещё глубже чем я себе представлял?
Daniel
вы о чем вообще?