Anonymous
Вот как получилось: var parseYaml []map[string]struct{ K1 string `yaml:"k1"` K2 string `yaml:"k2"` } ... err := yaml.Unmarshal(file, &parseYaml) ...
Anonymous
Не пришлось писать свой.
Aleksandr
так ты же написал, что у тебя разная структура может быть. посомтри на твои два примера
Anonymous
Не я изначатьно не правильно описал, после исправился, что структура одна, а вот ключи родмтельские -разные.
Anonymous
Привет всем! Направление разработки индустриального интернета вещей ищет разработчиков Rust\Go. Работа в офисе на м. Павелецкая. Для опытных разработчиков з/п 200+ т.р. Технические скилы: • Отличные знания TCP/IP стека • Отличные знания Go или Rust • Опыт работы с high load системами Будет огромным плюсом: • Опыт построение приложений, которые держат сотни тысяч постоянных коннектов • Опыт разработки стораджей или баз данных • Понимание CAP • Живые проекты на github #вакансия #москва #backend #go #rust
Mike
third time is a charm?
Мерль
third time is a charm?
Четвёртый уже
Mike
эх, пропустил
эх, пропустил
Пора уже написать баян-бота
Мерль
http://golangshow.com/episode/2017/05-03-099/
Илья
прям пятничный наброс
Илья
https://github.com/golang/go/issues/20165
kyprizel
нужно хранить два персистентных независимых счетчика uint32 - что лучше заиспользовать, чтобы было минимум зависимостей, но при этом макс. надежность по потере данных ? нагрузка минимальная. писать свою запись на диск в файлики с блокировками не хочется
Quet
левел это не "меньше"
Quet
болт норм для такого
kyprizel
thanks
kyprizel
embeded device)
kyprizel
но я уже посмотрел - проще в файлик сбрасывать
Ilya
Тарантул еще, но если нужны просто 2 циферки, то может проще и самому в файл
Kirill
Кирилл
Привет. Подскажите когда юзаешь go get, нормально что сразу может не загрузить репо?
Oleg
@FZambia, есть возможность встроить centrifugo в свой веб сервер?
Alexander
@olebedev привет, ты имеешь в виду из Go воспользоваться Centrifugo как библиотекой и поднять ее на своих роутах?
Alexander
Ну вообще так не задумывалось, но вот тут точка в хода - https://github.com/centrifugal/centrifugo/blob/master/libcentrifugo/centrifugo/main.go#L248 - передается список серверов и у сервера должны быть методы Run() и Shutdown() - но так пока никто не делал, сложно с ходу сказать, чем все обернется)
ainu
ainu
Потому что если возможно не как standalone бинарник, было бы круто
Alexander
А вот так чтобы просто заимпортировать обработчики и повесить их на свой роутер - это реально скорее всего, но нужно будет по кирпичикам с нуля строить - не тривиально
Alexander
слишком много stateful логики внутри
Alexander
Да, я думал об этом - даже есть интерфейс который можно передать ноде на старте для обработки событий от клиентов (https://github.com/centrifugal/centrifugo/blob/master/libcentrifugo/node/mediator.go) - но это достаточно сложно вынести в удобный API, так что так и осталось в зачаточном состоянии.
Alexander
Если у кого есть use case - можно попробовать поработать над этим, в общем-то в связке с Redis-ом даже что-то масштабируемое получится
Oleg
Видимо проще поднять контейнер и забыть )
Alexander
Если нагрузка небольшая, то наверное действительно проще просто отдельно поднять
Alexander
ну думай об этом как о микросервисах))) На самом деле я сейчас сам делаю проект у которого веб-морда - это SPA - а на бекенде у нее Django + Задачи в Crond + Celery, меня так раздражает что для простой вещи я должен делать 3 отдельных процесса, что вот планирую переписывать на Go
Alexander
ну да.. нужно будет подумать на тем чтобы сделать простую интеграцию с кодом в Centrifugo
Oleg
ну да.. нужно будет подумать на тем чтобы сделать простую интеграцию с кодом в Centrifugo
Довольно много в глобальных переменных всего лежит. Это будет не просто, судя по коду
Oleg
Но если сделать из Centrifugo библиотеку, это будет очень здорово
Oleg
Классный проект
Alexander
Да вроде не много, все основное внутри Node сосредоточено, но это точно будет не просто
ros
мапы не высвобождают память после удаления элементов. знать бы про это года полтора назад. весь мозг уже свернул куда память съедается.
Ivahaev
Ага, это не очень удобно - иметь много процессов для чего то очень(или не очень) простого. В любом случае, чем меньше процессов при прочих равных, тем лучше.
А как по мне, это очень удобно. Не нужно обновлять всё приложение, чтобы изменить какую-то часть. Параллелить по сервакам сложнее. Так что, очень спорное утверждение.
Ivahaev
Прочие равные могут быть совершенно разными :)
Oleg
Равные могут быть разными, ок
ros
А если в новую мапу присвоить старую? Тоже не высвободит память?
ХЗ я пока присваиваю старый во временный мап, мейкаю пустой и присваиваю старому потом рекурсивно переливаю все элементы из временного
ros
печально что с этим ничего делать пока не собираются https://github.com/golang/go/issues/20135
А ВОТ ТЕПЕРЬ ПАБЛИК
Тогда как освободить памятт
ros
проблема врожденная, но блин хоть где-нибудь бы было озвучено как освободить написал выше
ros
реалокацией только
ros
case <-mapReAllocate: // проблема в том что map не освобождают память // соответственно требуется полная реалокация // https://github.com/golang/go/issues/20135 tmpServersControl := ServersControl ServersControl = make(map[string]*data.TServerControl) for k, v := range tmpServersControl { ServersControl[k] = v } tmpViewers := Viewers Viewers = make(map[string]*data.TViewer) for k, v := range tmpViewers { Viewers[k] = v } }
ros
может и без рекурсии можно ХЗ, но пока так работает на паре сотне тысяч элементов пробегает быстро
ros
ros
вот так плавно ело
ros
приходилось перезапускать демона раз в 3-4 недели
ros
без рекурсии обычным присвоением скорей всего не обойтись, ибо map - указатель
Ivahaev
Я не совсем понял, не чистятся ссылки на элементы мапы, или только сами бакеты не сжимаются?
ros
из примера кода выше в ServersControl и Viewers постоянно добаляется и удаляется несколько тысяч элементов общее количество элементов остается примерно на одном уровне если ничего не предпринимать память выделяемая под эти map-ы будет постоянно расти
Maxim
тяжело представить, почему в таком случае ссылки могут не чиститься
Ivahaev
Ну и не страшно, стало быть. Разве что, если была мапа с миллионом элементов, а осталось два и больше не предвидится.
ros
пока существует map он может только расти похрену живые в нем элементы или нет
ros
хоть все удали через delete все-равно GC не соберется
Ivahaev
А что должен GC собрать? Мапа-то сама жива.
Ivahaev
Набрал ты 10 элементов, все удалил, вставил другие 10.
Ivahaev
Размер остался тот же.
ros
ну ссылки на удаленные элементы из неё не удаляются
Ivahaev
А, т.е. удалённые элементы не чистятся?
ros
т.е. как при 20
ros
да