Alexander
Коллеги, использую либу ffjson (кодогенерация), есть структура допустим из 10 полей. 3 из них с тегом json:"-". Нужно уметь маршалить/анмаршалить 7 полей или 10 полей в зависимости от ситуации
Alexander
Как правильно сделать это? Еще одну структуру завести с полными тегами?
Alexander
Не приходит в голову красивого решения
Alexander
В идеале бы другой тег задать
Vasily
Используй easyjson :)
Vasily
Есть вариант с заэмбеженной структуруой, у которой переопределены некоторые поля
Alexander
Можете кинуть ссылкой конкретно на этот функционал?
Vasily
Тогда одна будет полностьбю паковаться, другая, у которой переопределены поля, у другой - частично
Vasily
Конкретно этого функционала там нету
Alexander
Тогда я не понял, что значит " заэмбеженная структурура" :)
Vasily
Хм
Vasily
Есть ещё вариант
Alexander
Проставить теги везде, сгенерить, убрать теги, сгенерить еще раз?
Vasily
vby
Vasily
мин
Vasily
type Struct1 struct { Name string } type Struct3 struct { Struct1 Name string json:"-" }
Vasily
в easyjson дя подобного рода целей были сделаны opt.* поля
Vasily
там в зависимости о тфлага оно или папкуется или нет
Vasily
или ещё вариант - использовать указатель
Alexander
а под какую задачу надо делать разное?
Кешировать нужно не все поля, а передавать в JWT все
Vasily
тогда nil поковаться не будет с omit_empty
Alexander
или ещё вариант - использовать указатель
Да, думал об этом, но там поля int, string, придется коряво тогда поля инициализировать через взятие указателя
Alexander
Daniel
Кешировать нужно не все поля, а передавать в JWT все
тогда я бы на входе в кеш сделал бы кастомный маршалер. со второй структурой
Vasily
Field int json:",omitempty"
Alexander
тогда я бы на входе в кеш сделал бы кастомный маршалер. со второй структурой
Ну то есть копировать в новую структуру нужные поля и маршалить ее?
Alexander
Field int json:",omitempty"
Понял, это для указателей
Vasily
нет, с обыными полями тоже работает
Daniel
да, я бы сделал так. но у меня пунктик - не использовать для разных подсистем одни и те же структуры
Vasily
если значение по-умолчанию - то тогда оно не маршалится
Alexander
Спасибо, ребята
Alexander
Придумал, как проще сделать
Alexander
Взять msgpack и задать для него свои теги
Alexander
Для него есть тоже кодогенератор
Lev
curl -I
Lev
что неа?
макс
я хотел бы спросить у вас, как можно пройтись по мапе, которая находится в мапе? из головы вылетело
Alexander
what ? ну наверно так же как и по двумерному массиву
ceiling cat
for k, v := range nestedmap[key]
макс
блэт, чет я плыву
макс
спасибо
макс
Илья
очень интересная статья
Илья
https://segment.com/blog/allocation-efficiency-in-high-performance-go-services/?utm_source=golangweekly&utm_medium=email
Илья
:)
Michael
А кто какими пакетами пользуется для создания VK Ботов для сообществ?
Anonymous
А кто какими пакетами пользуется для создания VK Ботов для сообществ?
Гугл рекомендует https://github.com/go-telegram-bot-api/telegram-bot-api, но я пользуюсь самописным.
Michael
так нерелевантно гугл ещё не отвечал мне.
Alexander
это телеграм же а не вк :р
Michael
VK Bot. Не ТГ.
Michael
ага
Anonymous
Ааа, прочитал между строк 😂
Anonymous
Пятница же, зрение ослаблено на 90%
Anonymous
Ребят, подскажите, как правильно в Го сделать словарь с мьютексами, что-то типо такого mutexes = map[string]*sync.Mutex mutexes[key].Lock() defer mutexes[key].Unlock()Есть поток ключей, который слушают горутины, и нужно чтобы одинаковые ключи обрабатывались только одной горутиной. Т.е. если пришло 2 одинаковых ключа подряд, их взяли две разные горутины, но вторая ждет мьютекса.
Vasily
а канал пер ключ организовать не вариант ?
Vasily
буферизированный
Vasily
в смысле, что каждая горутина обрабатывает только свой ключ, через канал жрать конечно может побольше ресурсов если ключей много
Vasily
код выглядит правильным, но надо ещё его будет покрыть дополнительным мютексом на добавление-удаление ключей
Anonymous
горутину на ключ не вариант, ключей тысячи и неизвестны заранее
Anton
что-то мне подсказывает, что тебе тут акторная модель нужна..
Anonymous
те, словарь с каналами, что-то типо такого: var directionLocks sync.Map // worker lock, ok := directionLocks.Load(key) if ok { <-lock.(chan bool) } var lock = make(chan bool, 1) directionLocks.Store(key, lock) log.Println("Processed") lock <-true
Anonymous
Советую
Anonymous
https://github.com/AsynkronIT/protoactor-go
Anonymous
Ахахахахаххахах назвал константу url, два часа репу чесал почему url.QueryEscape не могу вызвать
Anton
Советую
о, поделись опытом. для какого проекта юзал? какие нагрузки? какие вообще впечатления?
Anonymous
@troyanov https://github.com/Nyarum/noterius
Anonymous
И отдельно еще в рабочем проекте для контроля бекграунд тасков
Anonymous
Гоурутина + канал - модель хорошая, но слишком низкоуровнево, абстракции свои всегда наворачиваются
Anonymous
Акторная модель в этом случае дает группировку хорошую
Anton
да, разные ключи - конкурентно, а одинаковые - последовательно
но тебе же нет смысла плодить миллион горутин. если у тебя стрим всегда идёт, то по скорости обработки ты выше GOMAXPROCS всеравно не прыгнешь. может быть стоит рассмотреть роутинг обработки? если ключ int - то остаток от деления. ну или по хэшу
Anton
по сути некий статик пул горутин на обработку и в них роутишь по какому-то признаку
Anton
@troyanov https://github.com/Nyarum/noterius
пасиб! поковыряю..
Anonymous
про роутинг думал, но чет не пошло. в соседнем чате посоветовали такой пакет https://github.com/moby/moby/tree/master/pkg/locker
Anton
про роутинг думал, но чет не пошло. в соседнем чате посоветовали такой пакет https://github.com/moby/moby/tree/master/pkg/locker
вариант с локами плох тем, что если у тебя прилетит 10 ключей, и ты их раскидаешь по 10-ти горутинам (например) и 9 из них у тебя локнутся. а если у тебя они все на разных тредах зашедулились - то локнешь треды
Anonymous
эт да. подумаю еще в сторону роутинга
Vasily
не локнутся системные треды. если конечно не прибивать горутину к треду гвоздями
Vasily
и это называется не роутинг, а шардинг