@gogolang

Страница 253 из 1630
ros
10.05.2017
06:34:53
type AutoGenerated []struct { Test1 struct { Test1K1 string `yaml:"test1_k1"` Test1K2 string `yaml:"test1_k2"` } `yaml:"test1,omitempty"` Test2 struct { Test2K1 string `yaml:"test2_k1"` Test2K2 string `yaml:"test2_k2"` } `yaml:"test2,omitempty"` }

Konstantin
10.05.2017
06:35:27
Может не совсем точно описал задачу. Если заранее не известны значения test1 и test2? Известна только их структура. Т.е. например в другой раз придет такой yaml: --- - test3: k1: val1 k2: val2 - test4: k1: val1 k2: val2

Google
Konstantin
10.05.2017
06:38:05
Ясно, спасибо! Пошел писать свой Unmarshal )))

Aleksandr
10.05.2017
06:39:24
Ясно, спасибо! Пошел писать свой Unmarshal )))
func (user *User) UnmarshalJSON(data []byte) error { var raw map[string]interface{} json.Unmarshal(data, &raw) user.Email = raw["email"].(string) user.Nickname = raw["nickname"].(string) user.Hash = raw["hash"].(string) rawData := raw["data"].(map[string]interface{}) if myLeagues, ok := rawData["myLeagues"]; ok { for _, myLeaguesMap := range myLeagues.(map[string]interface{}) { for key, _ := range myLeaguesMap.(map[string]interface{}) { if key != "used" { keyParts := strings.Split(key, "_") sportId, _ := strconv.Atoi(keyParts[0]) countryId, _ := strconv.Atoi(keyParts[1]) user.Leagues = append(user.Leagues, &League{ Id: keyParts[2], SportId: sportId, CountryId: countryId, }) } } } } if myGames, ok := rawData["mygames"]; ok { for _, myGamesMap := range myGames.(map[string]interface{}) { for key, _ := range myGamesMap.(map[string]interface{}) { if key != "used" { user.GamesIds = append(user.GamesIds, key) } } } } return nil } типа такого

ой, большой экран

Aleksandr
10.05.2017
06:54:05
так ты же написал, что у тебя разная структура может быть. посомтри на твои два примера

Konstantin
10.05.2017
06:56:06
Не я изначатьно не правильно описал, после исправился, что структура одна, а вот ключи родмтельские -разные.

Alyona
10.05.2017
13:33:39
Привет всем! Направление разработки индустриального интернета вещей ищет разработчиков Rust\Go. Работа в офисе на м. Павелецкая. Для опытных разработчиков з/п 200+ т.р. Технические скилы: • Отличные знания TCP/IP стека • Отличные знания Go или Rust • Опыт работы с high load системами Будет огромным плюсом: • Опыт построение приложений, которые держат сотни тысяч постоянных коннектов • Опыт разработки стораджей или баз данных • Понимание CAP • Живые проекты на github #вакансия #москва #backend #go #rust

Mike
10.05.2017
13:34:49
third time is a charm?

Мерлин
10.05.2017
13:38:23
third time is a charm?
Четвёртый уже

Mike
10.05.2017
13:38:37
эх, пропустил

10.05.2017
14:30:45
эх, пропустил
Пора уже написать баян-бота

Google
Мерлин
10.05.2017
18:06:56
http://golangshow.com/episode/2017/05-03-099/

Илья
10.05.2017
18:24:53
прям пятничный наброс

https://github.com/golang/go/issues/20165

kyprizel
10.05.2017
20:34:24
нужно хранить два персистентных независимых счетчика uint32 - что лучше заиспользовать, чтобы было минимум зависимостей, но при этом макс. надежность по потере данных ? нагрузка минимальная. писать свою запись на диск в файлики с блокировками не хочется

Quet
10.05.2017
21:04:09
левел это не "меньше"

болт норм для такого

kyprizel
10.05.2017
21:07:29
thanks

Andrey
10.05.2017
21:08:46
Редиска умеет в inc, далее вопрос надежности репликации

kyprizel
10.05.2017
21:16:02
embeded device)

но я уже посмотрел - проще в файлик сбрасывать

Andrey
10.05.2017
21:17:53
Ну ембедед решает этот вопрос энергонезависимой памятью

Ilya
10.05.2017
21:24:27
Тарантул еще, но если нужны просто 2 циферки, то может проще и самому в файл

Andrey
11.05.2017
00:22:09
Баньте бота

Кирилл
11.05.2017
04:56:57
Привет. Подскажите когда юзаешь go get, нормально что сразу может не загрузить репо?

Mars
11.05.2017
05:21:58
@FZambia, есть возможность встроить centrifugo в свой веб сервер?

Alexandr
11.05.2017
05:54:55
@olebedev привет, ты имеешь в виду из Go воспользоваться Centrifugo как библиотекой и поднять ее на своих роутах?

Alexandr
11.05.2017
06:02:27
Ну вообще так не задумывалось, но вот тут точка в хода - https://github.com/centrifugal/centrifugo/blob/master/libcentrifugo/centrifugo/main.go#L248 - передается список серверов и у сервера должны быть методы Run() и Shutdown() - но так пока никто не делал, сложно с ходу сказать, чем все обернется)

ainu
11.05.2017
06:10:03
Google
ainu
11.05.2017
06:10:40
Потому что если возможно не как standalone бинарник, было бы круто

Alexandr
11.05.2017
06:10:55
А вот так чтобы просто заимпортировать обработчики и повесить их на свой роутер - это реально скорее всего, но нужно будет по кирпичикам с нуля строить - не тривиально

слишком много stateful логики внутри

Mars
11.05.2017
06:11:39
Alexandr
11.05.2017
06:14:50
Да, я думал об этом - даже есть интерфейс который можно передать ноде на старте для обработки событий от клиентов (https://github.com/centrifugal/centrifugo/blob/master/libcentrifugo/node/mediator.go) - но это достаточно сложно вынести в удобный API, так что так и осталось в зачаточном состоянии.

Если у кого есть use case - можно попробовать поработать над этим, в общем-то в связке с Redis-ом даже что-то масштабируемое получится

Mars
11.05.2017
06:23:38
Видимо проще поднять контейнер и забыть )

Alexandr
11.05.2017
06:24:27
Если нагрузка небольшая, то наверное действительно проще просто отдельно поднять

Alexandr
11.05.2017
06:26:48
ну думай об этом как о микросервисах))) На самом деле я сейчас сам делаю проект у которого веб-морда - это SPA - а на бекенде у нее Django + Задачи в Crond + Celery, меня так раздражает что для простой вещи я должен делать 3 отдельных процесса, что вот планирую переписывать на Go

Alexandr
11.05.2017
06:33:07
ну да.. нужно будет подумать на тем чтобы сделать простую интеграцию с кодом в Centrifugo

Mars
11.05.2017
06:33:57
ну да.. нужно будет подумать на тем чтобы сделать простую интеграцию с кодом в Centrifugo
Довольно много в глобальных переменных всего лежит. Это будет не просто, судя по коду

Но если сделать из Centrifugo библиотеку, это будет очень здорово

Классный проект

Alexandr
11.05.2017
06:35:33
Да вроде не много, все основное внутри Node сосредоточено, но это точно будет не просто

ros
11.05.2017
07:40:26
мапы не высвобождают память после удаления элементов. знать бы про это года полтора назад. весь мозг уже свернул куда память съедается.

Ivahaev
11.05.2017
07:42:35
Ага, это не очень удобно - иметь много процессов для чего то очень(или не очень) простого. В любом случае, чем меньше процессов при прочих равных, тем лучше.
А как по мне, это очень удобно. Не нужно обновлять всё приложение, чтобы изменить какую-то часть. Параллелить по сервакам сложнее. Так что, очень спорное утверждение.

Google
Ivahaev
11.05.2017
07:43:40
Прочие равные могут быть совершенно разными :)

Mars
11.05.2017
08:02:46
Равные могут быть разными, ок

ros
11.05.2017
08:33:58
А если в новую мапу присвоить старую? Тоже не высвободит память?
ХЗ я пока присваиваю старый во временный мап, мейкаю пустой и присваиваю старому потом рекурсивно переливаю все элементы из временного

ros
11.05.2017
08:35:53
печально что с этим ничего делать пока не собираются https://github.com/golang/go/issues/20135

Eduard
11.05.2017
08:37:19
Тогда как освободить памятт

ros
11.05.2017
08:37:45
проблема врожденная, но блин хоть где-нибудь бы было озвучено как освободить написал выше

реалокацией только

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 } }

может и без рекурсии можно ХЗ, но пока так работает на паре сотне тысяч элементов пробегает быстро



вот так плавно ело

приходилось перезапускать демона раз в 3-4 недели

без рекурсии обычным присвоением скорей всего не обойтись, ибо map - указатель

Ivahaev
11.05.2017
09:14:21
Я не совсем понял, не чистятся ссылки на элементы мапы, или только сами бакеты не сжимаются?

ros
11.05.2017
09:16:53
из примера кода выше в ServersControl и Viewers постоянно добаляется и удаляется несколько тысяч элементов общее количество элементов остается примерно на одном уровне если ничего не предпринимать память выделяемая под эти map-ы будет постоянно расти

Maxim
11.05.2017
12:32:16
тяжело представить, почему в таком случае ссылки могут не чиститься

Ivahaev
11.05.2017
13:01:04
Ну и не страшно, стало быть. Разве что, если была мапа с миллионом элементов, а осталось два и больше не предвидится.

Google
ros
11.05.2017
13:04:51
пока существует map он может только расти похрену живые в нем элементы или нет

хоть все удали через delete все-равно GC не соберется

Ivahaev
11.05.2017
13:07:21
А что должен GC собрать? Мапа-то сама жива.

Набрал ты 10 элементов, все удалил, вставил другие 10.

Размер остался тот же.

ros
11.05.2017
13:08:31
ну ссылки на удаленные элементы из неё не удаляются

Ivahaev
11.05.2017
13:09:07
А, т.е. удалённые элементы не чистятся?

ros
11.05.2017
13:09:11
т.е. как при 20

да

Maxim
11.05.2017
13:14:00
хотя

Страница 253 из 1630