
Ilnur
12.03.2018
20:22:46
+ конфиги руками писать и читать приходится, и тут yml лучше всего подходит

Vladimir
12.03.2018
20:22:54
хотя прошло уже 6 лет

Roman
12.03.2018
20:23:25

Google

Ilnur
12.03.2018
20:39:52
угум, у json только один минус - следить за скобками приходится

Daniel
12.03.2018
20:44:18
мрачный кошмар, конечно, коллеги

Alexey
12.03.2018
20:46:12
Да товарищ троллит, наверняка.

Daniel
12.03.2018
20:47:21
1. json заставляет следить за скобками, кавычками и запятыми. учитывая, что парсер не выдает позицию в файле, в которой он обнаружил ошибку, использовать его в качестве конфига - не любить пользователя
2. yaml и toml - хороши, но, опять же, строку, в которой найдена ошибка синтаксиса, вам никто не сообщит
3. xml маршалер и анмаршалер - самые функциональные из имеющихся, ибо только они позволяют сохранить позицию комментария, и сериализовать вместе с ним. можно сделать генератор дефолтного конфига с пояснениями.


Vladimir
12.03.2018
20:50:07
1. json заставляет следить за скобками, кавычками и запятыми. учитывая, что парсер не выдает позицию в файле, в которой он обнаружил ошибку, использовать его в качестве конфига - не любить пользователя
2. yaml и toml - хороши, но, опять же, строку, в которой найдена ошибка синтаксиса, вам никто не сообщит
3. xml маршалер и анмаршалер - самые функциональные из имеющихся, ибо только они позволяют сохранить позицию комментария, и сериализовать вместе с ним. можно сделать генератор дефолтного конфига с пояснениями.
ты не прав
в пункте 2


Roman
12.03.2018
20:50:19
1. json заставляет следить за скобками, кавычками и запятыми. учитывая, что парсер не выдает позицию в файле, в которой он обнаружил ошибку, использовать его в качестве конфига - не любить пользователя
2. yaml и toml - хороши, но, опять же, строку, в которой найдена ошибка синтаксиса, вам никто не сообщит
3. xml маршалер и анмаршалер - самые функциональные из имеющихся, ибо только они позволяют сохранить позицию комментария, и сериализовать вместе с ним. можно сделать генератор дефолтного конфига с пояснениями.
json schema?

Vladimir
12.03.2018
20:50:32
@onokonem я взял ща toml, сломал конфиг, получил:
While parsing config: (16, 3): unexpected token table array key cannot contain ']', was expecting a table array key
ровно на 16-ой строке в 3-ем сиволе и сломано )

Roman
12.03.2018
20:51:05
но вот насчёт комментариев да, если они нужны тогда JSON не вариант

Vladimir
12.03.2018
20:51:28
@onokonem и с ямлом не прав:
While parsing config: yaml: line 21: did not find expected key
да, у ямла ошибка хуже чем у томла
но строка указана верно

Google

Roman
12.03.2018
20:53:30
что насчёт JSON schema? она может конкретно на валидность проверить не только синтаксис но и структуру конфига

Mykyta
12.03.2018
20:58:09
В жсоне как вариант использовать какое-то невалидное поле в качестве примера или комментария, например ставить _ вначале

Ilnur
12.03.2018
21:06:40

Daniel
12.03.2018
21:10:48

Roman
12.03.2018
21:14:49

Ilnur
12.03.2018
21:15:32
да вроде норм
против yml (а может за?) можно назвать возможность наследования
https://web.archive.org/web/20130213112648/http://blog.101ideas.cz/posts/dry-your-yaml-files.html

Daniel
12.03.2018
21:16:18

Ilnur
12.03.2018
21:16:25
у нас в проекте из-за этой "фичи" конфиг читать невозможно, придется рефакторить

Vladimir
12.03.2018
21:16:44
Вероятно ямл.в2
И сожжённые суши

Arch
13.03.2018
10:17:34
Народ, привет! Подскажите, создал мапу[string]*struct, в ранее упомянутом struct есть мьютекс для синхронизации, так вот пытаюсь в двух ключах мапы этот самый мьютекс залочить в двух горутинах, естественно, чтобы можно было менять сразу две struct, а оно на меня рычит, паникой плюется мол конкурентная рид-врайт, МБ я что-то не так делаю))
Естественно, если всю мапу в мьютекс обернуть, все живет в добром здравии. Но тогда теряется всякая надежда на конкуретную работы с кусками мапы.
По факту же у меня в мапе хранится просто указатель на структуру, чего ему не нравится?

Alexei
13.03.2018
10:24:00
не нравится, что ты в мапу лезешь в горутинах без мьютексов, тут кто-то пытался сделать мапу такую, как ты хочешь, но чем закончилось - хз, по-моему @kirilldanshin

John
13.03.2018
10:24:20

Alexei
13.03.2018
10:24:46
ну по сути это мапа с мьютексами же )

Vladimir
13.03.2018
10:24:49
Народ, привет! Подскажите, создал мапу[string]*struct, в ранее упомянутом struct есть мьютекс для синхронизации, так вот пытаюсь в двух ключах мапы этот самый мьютекс залочить в двух горутинах, естественно, чтобы можно было менять сразу две struct, а оно на меня рычит, паникой плюется мол конкурентная рид-врайт, МБ я что-то не так делаю))
Естественно, если всю мапу в мьютекс обернуть, все живет в добром здравии. Но тогда теряется всякая надежда на конкуретную работы с кусками мапы.
По факту же у меня в мапе хранится просто указатель на структуру, чего ему не нравится?
А что именно ты пытаешься сделать?

Alexei
13.03.2018
10:25:04
да, но суть та же

Google

John
13.03.2018
10:25:11

Vladimir
13.03.2018
10:25:22

Alexei
13.03.2018
10:25:35

John
13.03.2018
10:25:46

Artem
13.03.2018
10:26:11
https://play.golang.org/p/kxAEc22ipe1
всё ок

Arch
13.03.2018
10:26:43
Я пытаюсь в мапе менять значения одновременно в двух структурах

Vladimir
13.03.2018
10:26:45
Народ, привет! Подскажите, создал мапу[string]*struct, в ранее упомянутом struct есть мьютекс для синхронизации, так вот пытаюсь в двух ключах мапы этот самый мьютекс залочить в двух горутинах, естественно, чтобы можно было менять сразу две struct, а оно на меня рычит, паникой плюется мол конкурентная рид-врайт, МБ я что-то не так делаю))
Естественно, если всю мапу в мьютекс обернуть, все живет в добром здравии. Но тогда теряется всякая надежда на конкуретную работы с кусками мапы.
По факту же у меня в мапе хранится просто указатель на структуру, чего ему не нравится?
Го паникует при записи в мапу одновременно с чтением


Alexander
13.03.2018
10:26:56
Народ, привет! Подскажите, создал мапу[string]*struct, в ранее упомянутом struct есть мьютекс для синхронизации, так вот пытаюсь в двух ключах мапы этот самый мьютекс залочить в двух горутинах, естественно, чтобы можно было менять сразу две struct, а оно на меня рычит, паникой плюется мол конкурентная рид-врайт, МБ я что-то не так делаю))
Естественно, если всю мапу в мьютекс обернуть, все живет в добром здравии. Но тогда теряется всякая надежда на конкуретную работы с кусками мапы.
По факту же у меня в мапе хранится просто указатель на структуру, чего ему не нравится?
Так мб стоит получить из map структуру а потом лочить ее? И можно mutex только на получения/изменения самой map, а не структуры

Vladimir
13.03.2018
10:27:39

Arch
13.03.2018
10:27:48
Нельзя
Почему, по факту в мапе живут только указатели на структуры, внутри структуры я ставлю лок

Vladimir
13.03.2018
10:28:06

Arch
13.03.2018
10:28:31
Все дошло!!!!!!!!!!!

Alexander
13.03.2018
10:28:47

Kirill
13.03.2018
10:28:49
Народ, привет! Подскажите, создал мапу[string]*struct, в ранее упомянутом struct есть мьютекс для синхронизации, так вот пытаюсь в двух ключах мапы этот самый мьютекс залочить в двух горутинах, естественно, чтобы можно было менять сразу две struct, а оно на меня рычит, паникой плюется мол конкурентная рид-врайт, МБ я что-то не так делаю))
Естественно, если всю мапу в мьютекс обернуть, все живет в добром здравии. Но тогда теряется всякая надежда на конкуретную работы с кусками мапы.
По факту же у меня в мапе хранится просто указатель на структуру, чего ему не нравится?
Падажжи, чё-то ты не то написал

Arch
13.03.2018
10:29:04
Когда я пытаюсь работать со структурой, то вхожу в нее через мапу, вот оно и ругается
Base[Symbol].List[TF] = ....

Kirill
13.03.2018
10:30:05
Да закопируй поинтер и фсё

Arch
13.03.2018
10:30:16

Google

Alexander
13.03.2018
10:30:22

Kirill
13.03.2018
10:31:06
++
Но сразу скажу - будешь добавлять поинтеры - блокируй и чтение

Alexander
13.03.2018
10:31:26

Arch
13.03.2018
10:31:31
Не надо так)
Рад бы, да нужна структура двух уровневого ассоциативного массива

Kirill
13.03.2018
10:31:56

Alexander
13.03.2018
10:32:39

Admin
ERROR: S client not available

Arch
13.03.2018
10:33:01

Alexander
13.03.2018
10:33:15
sync.Map выше рекомендовали уже

Kirill
13.03.2018
10:33:58

Alexander
13.03.2018
10:34:50

Arch
13.03.2018
10:36:00
На сколько я помню там мап по бенчу медленный какой-то
Мне правда просто поинтер надо было в новую переменную скопировать на структуру и все

Kirill
13.03.2018
10:36:31
И держит две копии данных

Arch
13.03.2018
10:36:48

Alexander
13.03.2018
10:36:59

Kirill
13.03.2018
10:38:40
И ты всегда можешь прочитать старые данные

Google

Kirill
13.03.2018
10:39:45
А насколько же вам будет приятно, когда вы поймаете момент, когда будете читать устаревший поинтер?

Alexander
13.03.2018
10:40:26
Если поинтер никогда не меняется
Хотя тогда правда и смысла в sync.Map нет)

Kirill
13.03.2018
10:41:12

Arch
13.03.2018
10:54:59
Работает, реально дело было в обращении к структуре через мапу, сторло указатель в переменную вынести и все ожило
Спасибо всем откликнувшимся, кто натолкнул на мысль.

Roman
13.03.2018
17:25:29
https://github.com/qbeon/webwire-go/blob/master/message.go#L693
стоит ли данный switch statement превратить в jump table?

Daniel
13.03.2018
17:27:25
а что такое jump table?

Roman
13.03.2018
17:31:32

Daniel
13.03.2018
17:31:57
скорее всего - будет медленнее и менее читаемо.
не говоря уже о runtime контроле типов

Roman
13.03.2018
17:33:55
https://hashrocket.com/blog/posts/switch-vs-map-which-is-the-better-way-to-branch-in-go

Daniel
13.03.2018
17:34:41
ну - померяйте, че
не понятно, с чего бы ему быть быстрее

Roman
13.03.2018
17:34:59
"I assumed that switches would be faster. I was wrong. Maps are usually faster, often several times faster."

Alexander
13.03.2018
17:35:40
Additionally, even if that is the case, the memory access pattern and branch prediction success rate have a bigger impact on performance than the choice of a switch or map.