
some_random_anonymous
02.12.2017
07:01:30
https://github.com/gohugoio/hugo/blob/master/main.go#L21
В общем так везде делают

Slach
02.12.2017
07:04:12

Александр
02.12.2017
07:31:25
Как можно архитектурно зарефакторить такой код?
switch incomeEvent.Action {
case models.CALL:
switch incomeEvent.Method {
case models.GET:
getRequestHandler(incomeEvent)
case models.POST:
postRequestHandler(incomeEvent)
}
case models.SUBSCRIBE:
switch incomeEvent.Method {
case models.POST:
postSubscribeHandler(incomeEvent)
}
}
P.S. Внутри этих методов еще switch.
Полиморфизм? Регистрация колбеков? Мб еще варианты есть? В golang новичок. Такая вложенность, еще и раскиданная по файлам мне не нравится

Google

Александр
02.12.2017
07:34:53
Было бы читабельно просто:
switch "first_type":
handler.first(incomeEvent)
switch "second_type":
handler.second(incomeEvent)
switch "third_type":
handler.third(incomeEvent)
Или так:
handler := getHandler(incomeEvent)
handle.handle(incomeEvent)

Vladislav
02.12.2017
07:40:50
А models.CALL и т.п. это константы?
Какого типа?

Александр
02.12.2017
07:41:01
да, интовые
Пока мысли примерно такие:
Events = map[string]string{
"request_messages": fmt.Sprintf("%s-%s", models.CALL, models.GET),
"send_message": fmt.Sprintf("%s-%s", models.CALL, models.POST),
}

Vladislav
02.12.2017
07:45:42
Ну я регистрацией обычно такое делаю.
Мапа(лучше массив если константы позволяют), в которой соответствие константе функции.

Александр
02.12.2017
07:49:28
Один из вариантов есть такой
И тестить потом проще будет

?
02.12.2017
07:50:24
Вы по книгам го учите? Линкс?

Mush
02.12.2017
07:52:29

Александр
02.12.2017
07:52:57
Вы по книгам го учите? Линкс?
нет, я просмотрел на pluralsight курсы, параллельно с ноутбуком на коленках и с паузами:
https://app.pluralsight.com/library/courses/go-fundamentals/table-of-contents
https://app.pluralsight.com/library/courses/go-concurrent-programming/table-of-contents
+ я давно знаю другие языки, немного легче понять

Google

Александр
02.12.2017
07:54:16
Хотя чё, в java/node/js же есть

?
02.12.2017
07:54:49

Александр
02.12.2017
07:57:57
Ну, если полный rx не рассматривать, а паттерн Observer

Slach
02.12.2017
08:13:03
а я правильно понял текущую концепцию работы с database/sql ? повторно *Rows пройтись через .Next() нельзя???
т.е. надо обязательно после запроса профетчить и сложить куда нибудь себе в буфер? если хочешь повторно использовать?

/dev/null
02.12.2017
08:13:09
Ребят, хотел бы узнать как правильно будет реализовать следующие.
Есть СУБД, бэкенд на Го и фронт на Vue
По ходу добавления новых записей в СУБД (Postgresql) на фронтенд должна передаваться эта запись.
Как я вижу это:
Триггер в СУБД срабатывает при добавление новой записи и отправляет запрос в бэкенд на го (с этой новой записью), на фронте раз в несколько секунд делается запрос к бэкенду на проверку новых записей и если есть, то получит его уже с бэкенда...


Mush
02.12.2017
08:16:59

/dev/null
02.12.2017
08:18:19

Александр
02.12.2017
08:18:40

Mush
02.12.2017
08:19:04

/dev/null
02.12.2017
08:19:05

Александр
02.12.2017
08:19:24

/dev/null
02.12.2017
08:19:48

Александр
02.12.2017
08:21:04
Можно поподробнее, не понимаю про что вы
запрос раз в несколько секунд приведет к геометрическому росту нагрузки на сервак при увеличении кол-ва пользователей. Если подключиться к сокетам и сервак будет сообщать об изменениях только тогда, когда они произошли, то даже арифметического увеличения не будет
Ну вот так я и предлагал изначально
Зависит от конкретных целей задачи. Может слушать базу, может только по f5 обновлять данные, может с бэка отправлять после изменений в базе. Смотря что вы делаете)
Вообще лучше забудьте об опросе с клиента с интервалом навсегда)
Сами себя заддосите

/dev/null
02.12.2017
08:23:07

Google

/dev/null
02.12.2017
08:23:25
Нужно по пабсаб почитать

Kirill
02.12.2017
08:23:39

Александр
02.12.2017
08:23:40
А когда проблема появится (внезапно) - вы вообще ничего не сможете сделать, кроме как остановить сервер

Mush
02.12.2017
08:23:55

Александр
02.12.2017
08:24:19

Kirill
02.12.2017
08:26:11
а если какой-нибудь firebase Cloud messaging юзать?

/dev/null
02.12.2017
08:26:46
Можно пример реализации pub/sub на Go?

Александр
02.12.2017
08:27:01

Mush
02.12.2017
08:27:50

Kirill
02.12.2017
08:27:55
я хз, это либа гугловая которая тебе оповещения кидает на события

Александр
02.12.2017
08:27:58

/dev/null
02.12.2017
08:28:35
Авторизация есть

Александр
02.12.2017
08:28:57

Mush
02.12.2017
08:29:35

/dev/null
02.12.2017
08:29:47

Mykyta
02.12.2017
08:30:01
Rabbitmq

Mush
02.12.2017
08:30:05
кролик с персистент очередями - не для хайлоада решение

Александр
02.12.2017
08:30:18
ну кто слушает события, тот услышит, если упал, то прослушал своё сообщение)

Mush
02.12.2017
08:31:09

Google

/dev/null
02.12.2017
08:31:14
Извините не совсем понимаю как это будет выглядеть, как редис будет получать инфу о новых записях в БД Postgresql

Александр
02.12.2017
08:31:46

Mykyta
02.12.2017
08:31:46

/dev/null
02.12.2017
08:32:02

Mush
02.12.2017
08:32:03

Mykyta
02.12.2017
08:32:11
Либо отлавливать на уровне бизнес-логики
Мне это даже более приемлемым кажется

Александр
02.12.2017
08:32:30

/dev/null
02.12.2017
08:32:47

Admin
ERROR: S client not available

Kirill
02.12.2017
08:33:02
на уровне бд шустрее же, не?
Либо отлавливать на уровне бизнес-логики
Мне это даже более приемлемым кажется

Александр
02.12.2017
08:33:43

Mush
02.12.2017
08:33:48
у меня было 2 хайлоад проекта на такой схеме на одной из старых работ.

Mykyta
02.12.2017
08:34:46

Mush
02.12.2017
08:35:08
хотя если pg_notify не тупит, но можно и его слушать а редис не добавлять. так меньше баз будет. я просто никогда не работал с pg_notify и не знаю, что он и как он. редис точно для хайлоада подойдет

/dev/null
02.12.2017
08:35:26
Смотрите что откопал
https://github.com/go-redis/redis
Правильно я понимаю, что для этого лучше сделать отдельный микросервис?

Александр
02.12.2017
08:36:48

Google

Александр
02.12.2017
08:37:08
в 1 случае всё просто - без триггеров в базе/кролика и т.п.

Mush
02.12.2017
08:37:19
есть даже сразу проекты вебсокет + пабсаб редиса https://github.com/cooperhewitt/go-pubsocketd

/dev/null
02.12.2017
08:38:06

Александр
02.12.2017
08:38:42
Тогда pg_notify -> redis -> go -> ws

Mush
02.12.2017
08:39:05

Александр
02.12.2017
08:39:37
Вешается триггер на базу, который шлёт с помощью pg_notify publish в редис, go слушает редис, при сообщениях шлёт в ws клиенту

Mush
02.12.2017
08:40:07

Александр
02.12.2017
08:40:09

/dev/null
02.12.2017
08:40:32

Александр
02.12.2017
08:40:38
да

/dev/null
02.12.2017
08:40:47
Спасибо
Теперь имею представление как это реализовать.

Mush
02.12.2017
08:41:15
когда клиент подключается к ws, ассоциированная с клиентом рутина начинает слушать канал уведомлений для юзера.
как только туда что-то приходит, рутина посылает это в сокет клиенту

Alexey
02.12.2017
08:56:49
Не реклама
Видели?
Alexey Troyanov:
http://xidea.online/
Лицензировать любой продукт jetbrains
Интересно с goland сработает?

Александр
02.12.2017
08:58:11
Уже несколько лет назад появились такие сервера. Но лучше купить или получить бесплатно, если есть opensource-продукт

Kirill
02.12.2017
08:59:02
еще студ лицухи есть)

Alexey
02.12.2017
09:03:49
Ну так goland триал только? Я вот pycharm качаю CE