@gogolang

Страница 683 из 1630
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
А, тебе нужен относительный импорт в пределах твоего проекта?
нет, мне просто надо чтобы насчет src кстати помогло перенесение папки в src/morgoth и все взлетело... GOPATH указывает на корень в котором есть src/morgoth и src/vendor

Александр
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
Вы по книгам го учите? Линкс?

Александр
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 + я давно знаю другие языки, немного легче понять

выглядит как шаблон observer https://gist.github.com/sayden/d3ab61726057b7a37963
Реактивщина в golang?) Не приходило в голову)

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

Александр
02.12.2017
07:57:57
выглядит как шаблон observer https://gist.github.com/sayden/d3ab61726057b7a37963
Этот паттерн по сути реализуют каналы, только с разницей в синтаксисе и с буферизацией

Ну, если полный 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:19:04
Вроде того, что если кто добавил через этот бэкенд новую запись, то все его клиенты должны обновить свой items?
клиенты могут быть подключены к чему-то вроде publish-subscribe (например вебсокет или редис) и они автоматом смогут получать обновления

/dev/null
02.12.2017
08:19:05
Александр
02.12.2017
08:19:24
Александр
02.12.2017
08:21:04
Можно поподробнее, не понимаю про что вы
запрос раз в несколько секунд приведет к геометрическому росту нагрузки на сервак при увеличении кол-ва пользователей. Если подключиться к сокетам и сервак будет сообщать об изменениях только тогда, когда они произошли, то даже арифметического увеличения не будет

Ну вот так я и предлагал изначально
Зависит от конкретных целей задачи. Может слушать базу, может только по f5 обновлять данные, может с бэка отправлять после изменений в базе. Смотря что вы делаете)

Вообще лучше забудьте об опросе с клиента с интервалом навсегда)

Сами себя заддосите

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

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

Mush
02.12.2017
08:23:55
Можно слушать изменения в постгре. Более того, можно написать триггеры, которые будут в кролика что-то отправлять при изменениях
посмотрел, на основе этого работает https://www.postgresql.org/docs/9.5/static/sql-notify.html никогда не сталкивался, интересно

Александр
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
а если какой-нибудь firebase Cloud messaging юзать?
Он по сокетам проде работает?

Mush
02.12.2017
08:27:50
Можно пример реализации pub/sub на Go?
я лично предлагал конкретно вот это. реализация на стороне редиса https://redis.io/topics/pubsub

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

Александр
02.12.2017
08:27:58
Можно пример реализации pub/sub на Go?
Пакет http и gorilla/websocket, там в вашем случае скорее всего нечего делать, если нет всяких авторизаций и т.п.

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

Александр
02.12.2017
08:28:57
я лично предлагал конкретно вот это. реализация на стороне редиса https://redis.io/topics/pubsub
В редисе сработал publish и исчез. Прослушал - досвидос, тут лучше кролика

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

/dev/null
02.12.2017
08:32:02
pg-notify
ааа

Mush
02.12.2017
08:32:03
Извините не совсем понимаю как это будет выглядеть, как редис будет получать инфу о новых записях в БД Postgresql
моя реализация полностью такова: в базу вставляет код на го. он же посылает в пабсаб редиса данные. подписчики редиса получают эти данные.

Mykyta
02.12.2017
08:32:11
Либо отлавливать на уровне бизнес-логики

Мне это даже более приемлемым кажется

Александр
02.12.2017
08:32:30
зависит от требований - надо ли оффлайн события получать или нет
согласен. Если не нужен офлайн - проще с редисом

Admin
ERROR: S client not available

Kirill
02.12.2017
08:33:02
на уровне бд шустрее же, не?

Либо отлавливать на уровне бизнес-логики

Мне это даже более приемлемым кажется

Александр
02.12.2017
08:33:43
моя реализация полностью такова: в базу вставляет код на го. он же посылает в пабсаб редиса данные. подписчики редиса получают эти данные.
Блин, так ты хочешь не базу слушать, а отправлять при запросе в БД? тогда никакие pg_notify и redis не нужны, шли сразу в сокеты

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
Смотрите что откопал https://github.com/go-redis/redis Правильно я понимаю, что для этого лучше сделать отдельный микросервис?
Ты скажи, тебе достаточно будет, если из приложухи изменяется база и ты в приложухе можешь отловить это событие, или если руками в базе или из другого сервиса что-то поменяли - тоже бывает и это нужно?

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

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

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

Mush
02.12.2017
08:39:05
Тогда pg_notify -> redis -> go -> ws
тогда можно так: pg_notify -> go -> ws

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

Александр
02.12.2017
08:40:09
/dev/null
02.12.2017
08:40:32
Вешается триггер на базу, который шлёт с помощью pg_notify publish в редис, go слушает редис, при сообщениях шлёт в ws клиенту
А клиент (ws) получается постоянно подключен через сокет к бэкенду и слушает обновления?

Александр
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

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