
Denys
15.09.2018
10:48:31
но сейчас через глобальые переменные в пакете тоже не ок
можно DI заюзать, но я не люблю DI в го
с другой стороны передавать в структуру хендлера параметры делает код более понятным, что он использует

many-faced
15.09.2018
11:05:33
Знатоки gin-gonic, подскажите пожалуйста, как сделать так, чтобы данные из хедера POST-запроса были доступны и в middleware и в конечной функции? Проблема в том, что если я делаю в middleware c.BindJSON(&myStruct) то данные вычитываются(пропадают) из контекста.

Google

Kirill
15.09.2018
11:14:12
CoffeeGo
Жуть

many-faced
15.09.2018
11:15:30

Alik
15.09.2018
11:17:12
хотел подобное делать сам. зачёт ))

Kirill
15.09.2018
11:18:09
вопрос не понятен.
Ну - у меня в миддлварах доступен тот же контекст, что и в хендлере, а исходя из вопроса, в gin не так

many-faced
15.09.2018
11:19:06

Kirill
15.09.2018
11:26:09
Данные

many-faced
15.09.2018
11:26:29
секунду, проверяю кое-что
и, если их не биндить в middleware, они доходят до конечного хендлера.
Я понимаю, что можно из в middleware считать, и перезапихнуть в контекст, но мне это кажется костылями.

Google

Kirill
15.09.2018
11:31:08

Roman
15.09.2018
11:50:22
что для websocket использовать?
зависит от задания, что тебе конкретно нужно? сомневаюсь что нужен чистый низкоуровневый вебсокет, может скорее нужна bidirectional связь?

Oleg
15.09.2018
11:52:44
мне нужна полнодуплексная шина сообщений) как можно высокоуровневая)

Roman
15.09.2018
11:53:35

Oleg
15.09.2018
11:57:10
вижу твое творчество. Используется где?
а где пример веб-клиента?

Roman
15.09.2018
11:59:56

Savely
15.09.2018
12:00:23
раньше открывался

Aleksandr
15.09.2018
12:00:53

Roman
15.09.2018
12:01:10
а где пример веб-клиента?
https://github.com/qbeon/webwire-go/tree/master/examples/chatroom
имеется JS example клиент: https://github.com/qbeon/webwire-js/tree/master/examples/chatroom-client-vue

Savely
15.09.2018
12:01:47
я сначала подумал опять проделки ркн

Roman
15.09.2018
12:02:14

Aleksandr
15.09.2018
12:05:09

Oleg
15.09.2018
12:05:50
какие еще варианты есть? огласите весь список, пожалуйста

Daniel
15.09.2018
12:06:03

Roman
15.09.2018
12:06:55
а вот скажи, это замена горилле?
нет, это более высокий уровень абстракции. Под капотом тот-же горилла вебсокет
вебсокет это тупая труба, она умеет только подключиться и слать сообщения туда сюда..
вебсокет по умолчанию понятия не имеет об request-response, аутентификации, сессиях, авто-восстановление соединения и сессии и т.д.
в прочем, надеюсь что достаточно хорошо описал features: https://github.com/qbeon/webwire-go#features

Google

Aleksandr
15.09.2018
12:08:35

ImCat
15.09.2018
12:08:56
И как мы можем об этом узнать?
Я не знаю, у меня была такая же претензия, но думаю нужно было включить шерлока догадаться что ответа 15 нет и дедукцией вычислить что буква А латиницей написана

Aleksandr
15.09.2018
12:09:47

Roman
15.09.2018
12:10:08

Aleksandr
15.09.2018
12:11:01
ок. скажи, насколько webwire тяжелый. если я например решу внедрить ws в своем пете, это будет оправданный выбор?

Roman
15.09.2018
12:11:31

Aleksandr
15.09.2018
12:12:40
скорее функциональный оверхед

Roman
15.09.2018
12:15:31
скорее функциональный оверхед
он по сути умеет всё что умеет тупой сокет и HTTP/2, но предоставляет тебе возможность самому определить формат общения, будь то UTF8 text, JSON, Thrift, Protobuf, plain binary...
у webwire сообщений довольно малый overhead, 9-10 байт для запросов, 3-4 байт для сигналов
сигналы отличаются от простых message'ей тем что несут информацию о кодировке сообщения и имя для route'инга
скорее функциональный оверхед
а интерфейс довольно простой. Имплементируешь интерфейс сервера/клиента и там всё более менее интуитивно.
от concurrent access'а все интерфейсы взаимодействия с connection'ами, сервером, клиентом, сессиями и т.д. защищены
по производительности: https://github.com/qbeon/webwire-go/issues/17#issuecomment-401216669
ещё не идеально, но 10к rps на 10к соединениях тянет без особых проблем

Savely
15.09.2018
12:22:36

many-faced
15.09.2018
12:26:01
ну — это ожидаемый костыль, да
Но не подходящий, потому что в middleware мы ещё не знаем в какую именно структуру парсить данные из запроса. В каждом хендлере - происходит c.BindJSON в свою структуру.

Kirill
15.09.2018
12:34:18
по-моему, для такой архитектуры джин не оч заходит

many-faced
15.09.2018
12:34:43

Заур
15.09.2018
12:35:10
Здравствуйте, есть ли Go канал для новичков, по типу python_beginners?

Александр
15.09.2018
12:35:28
тут задвайте

many-faced
15.09.2018
12:36:19
возможно, я саму задачу неверно решаю. Мне в запросе нужно ловить аутентификационный токен и сами данные запроса. На группу адресов я назначил мидлвер и там ловлю аутентификационный токен, и если он подходит, то данные должны идти дальше в хендлер. Логично же?

Bohdan
15.09.2018
12:36:32
разве что обычно просят пройти go tour перед вопросом

Заур
15.09.2018
12:38:12
тут задвайте
Как лучше начать изучение Go? Сразу с фреймворка или самому писать свои миддлвари, орм и т.д.?

Google

Александр
15.09.2018
12:38:26
с изучения стандартных пакетов
фрейворки у нас не жалуют

Kirill
15.09.2018
12:38:46

Александр
15.09.2018
12:38:58
... и прохождения туториала

Kirill
15.09.2018
12:39:24

Александр
15.09.2018
12:39:41
прямо в корне?

Заур
15.09.2018
12:40:02
то есть по сути Go по типу микрофреймворка? В стандартном пакете есть все для веба -> дальше сам крафтишь свой апп? Почти как Flask в питоне, так?

Admin
ERROR: S client not available

Александр
15.09.2018
12:40:29

Kirill
15.09.2018
12:40:37

Заур
15.09.2018
12:40:54
понял, спасибо

Ilya
15.09.2018
13:56:07
Есть JSON RPC сервис, построенный на стандартном пакете. И что бы клиенту вызвать какой то метод, он должен передать имя структуры и имя метода ИмяСтруктуры.ИмяМетода, можно ли как то переписать сервис на стандартном пакете, что бы клиент вызывал метод имяметода.


Roman
15.09.2018
13:58:15
существует уже кодо-анализатор который способен относительно экспортируемых символов пакета вычислять semver версию?
допустим в новом комите я изменил интерфейс пакета, переименовал экспортируемую функцию:
было:
package mypack
// ParseText parses texts from a file
func ParseText(file string) error {
/*...*/
}
стало:
package mypack
// ParseFile parses texts from a file
func ParseFile(file string) error {
/*...*/
}
очевидно я поломал обратную совместимость, поэтому анализ должен это распознать и присвоить моему комиту версию 2.0.0
однако если я не поломал совместимость в комите:
было:
package mypack
// ParseFile parses texts from a file
func ParseFile(file string) error {
/*...*/
}
стало:
package mypack
// ParseFile parses texts from a file
func ParseFile(file string) error {
/*...*/
}
// CreateFile creates a new file
func CreateFile() error {
/*...*/
}
т.е. например добавил новую функцию, тогда он считает feature version v2.1.0
а если я ничего не ломал но и ничего не добавлял но изменил что-то в недрах - то v2.1.1
думаю такая автоматизация версионирования была бы очень полезна


Bohdan
15.09.2018
14:01:03


Artem
15.09.2018
14:04:27


Roman
15.09.2018
14:07:33
изменение в интерфейсе пакета: major increment (compatibility)
добавление в интерфейс пакета: minor increment (feature)
внутренние изменения: patch increment (bug fix / improvement)
commit message может быть использован в качестве пункта в CHANGELOG'е дополнительно к автоматически сгенерированному пункту по поводу того что изменилось и как


Alexander
15.09.2018
14:12:16

Google

Roman
15.09.2018
14:12:49

Alexander
15.09.2018
14:14:24

Artem
15.09.2018
14:15:05

Roman
15.09.2018
14:15:18
https://forum.golangbridge.org/t/go-1-2-immutability-proposal/10613

Alexander
15.09.2018
15:24:20

Roman
15.09.2018
15:25:11

Alexander
15.09.2018
15:25:51

Daniel
15.09.2018
15:39:52
Еще как.

Заур
15.09.2018
16:32:05
Ребят, я как понял в Go горутины - самые обычные корутины, только с implicit event loop'ом?

Алексей
15.09.2018
16:41:59

Daniel
15.09.2018
16:42:16

Алексей
15.09.2018
16:44:08
Чёт я походу не особо подумал. Потому что корутины могут и на нескольких потоках крутиться
и там не совсем кооперативная многозадачность получается
Но к примеру в ноде, корутина не прерывается пока не встретилось слово await.
То есть корутина сама фактически должна отдать управление другим корутинам, что собственно и есть кооперативная многозадачность

Daniel
15.09.2018
16:45:56
Многозадачность бывает кооперативная и вытесняющая. Горутины - кооперативная

Алексей
15.09.2018
16:47:58
хм