Alexander
Коллеги, использую либу ffjson (кодогенерация), есть структура допустим из 10 полей. 3 из них с тегом json:"-". Нужно уметь маршалить/анмаршалить 7 полей или 10 полей в зависимости от ситуации
Alexander
Как правильно сделать это? Еще одну структуру завести с полными тегами?
Alexander
Не приходит в голову красивого решения
Alexander
В идеале бы другой тег задать
Vasily
Используй easyjson :)
Vasily
Есть вариант с заэмбеженной структуруой, у которой переопределены некоторые поля
Alexander
Можете кинуть ссылкой конкретно на этот функционал?
Vasily
Тогда одна будет полностьбю паковаться, другая, у которой переопределены поля, у другой - частично
Vasily
Конкретно этого функционала там нету
Alexander
Тогда я не понял, что значит " заэмбеженная структурура" :)
Vasily
Хм
Vasily
Есть ещё вариант
Alexander
Проставить теги везде, сгенерить, убрать теги, сгенерить еще раз?
Vasily
vby
Vasily
мин
Daniel
Vasily
type Struct1 struct {
Name string
}
type Struct3 struct {
Struct1
Name string json:"-"
}
Vasily
в easyjson дя подобного рода целей были сделаны opt.* поля
Vasily
там в зависимости о тфлага оно или папкуется или нет
Vasily
или ещё вариант - использовать указатель
Vasily
тогда nil поковаться не будет с omit_empty
Alexander
Vasily
Field int json:",omitempty"
Alexander
Alexander
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 Ботов для сообществ?
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
И отдельно еще в рабочем проекте для контроля бекграунд тасков
Anton
Anonymous
Гоурутина + канал - модель хорошая, но слишком низкоуровнево, абстракции свои всегда наворачиваются
Anonymous
Акторная модель в этом случае дает группировку хорошую
Anonymous
Anton
да, разные ключи - конкурентно, а одинаковые - последовательно
но тебе же нет смысла плодить миллион горутин.
если у тебя стрим всегда идёт, то по скорости обработки ты выше GOMAXPROCS всеравно не прыгнешь.
может быть стоит рассмотреть роутинг обработки? если ключ int - то остаток от деления. ну или по хэшу
Anton
по сути некий статик пул горутин на обработку и в них роутишь по какому-то признаку
Anton
Anonymous
про роутинг думал, но чет не пошло. в соседнем чате посоветовали такой пакет https://github.com/moby/moby/tree/master/pkg/locker
Anonymous
эт да. подумаю еще в сторону роутинга
Vasily
не локнутся системные треды. если конечно не прибивать горутину к треду гвоздями
Vasily
и это называется не роутинг, а шардинг