
Мерлин
25.10.2018
10:40:37

Vladimir
25.10.2018
10:40:47
и мутексы, семафоры и прочие объекты синхронизации

Daniel
25.10.2018
10:40:52
если надо асиннхронно - запускаете ваш код в горутине и придумывааете, как вернуть ответ.

Vladimir
25.10.2018
10:40:58
здесь их много, и если ты из мира жс (как и я), ты еще хапнешь с ними :D

Google

behemostte
25.10.2018
10:41:00

Artem
25.10.2018
10:41:09

anatolii
25.10.2018
10:41:58

SkyCoffee
25.10.2018
10:43:51
Горутины можно рассматривать как людей-рабочих, которые работают отдельно друг от друга, асинхронно, а общаться между собой им разрешают только через корпоративную переписку (каналы).

Vladimir
25.10.2018
10:44:08
(по рации) :D
обожаю аналогии

Vadim
25.10.2018
10:44:30
Тоесть, что бы сделать метод client.Get() асинхронным. его нужно обернуть в функцию и внутри нее работать с каналов. А вне уже чекать канал и если пришло что то, то уже продолжать обработку?

Мерлин
25.10.2018
10:44:43

Vladimir
25.10.2018
10:46:29

Daniel
25.10.2018
10:47:39

Vadim
25.10.2018
10:49:31
Тоесть, если Апишку, которая стучиться к другой апишке и на основе этих данных возвращает данные целовому пользователю реализовать обычным client.Get(), то все равно все запросы, которые будут поступать на эту апишку будут асинхронными?

Daniel
25.10.2018
10:50:02
они будут синхронными, но выполняться будут параллельно

Google

Daniel
25.10.2018
10:50:30
потому, что go, в отличие от js, умеет в многопоточность

Kirill
25.10.2018
10:50:32

Pawel
25.10.2018
10:50:44

Artem
25.10.2018
10:51:24

SkyCoffee
25.10.2018
10:52:31
andlabs ui поставляется сразу с собранными статическими либами, подозрительно это

Vadim
25.10.2018
10:53:07
при таком подходе параллельность достигается колличеством ядер процессора., правильно? А что бы еще раздробить параллельность в одном потоке, то это нужно использовать горутины?

Vladimir
25.10.2018
10:53:32

Artem
25.10.2018
10:55:32

Vladimir
25.10.2018
10:55:58
я думаю, умные дядьки тебе расскажут, но горутины существуют только в виртуальном пространстве рантайма го, а не в ос, как треды
соответственно, используется планировщик Go, а не ос
ну и в целом они много-много легче

Daniel
25.10.2018
10:56:24

SkyCoffee
25.10.2018
10:58:50
Когда много горутин выполняется на одном ядре процессора, они выполняются как асинхронные функции в js, если так легче воспринимать. Притом говорят, Go распределяет их по всем ядрам так, чтобы у каждого ядра была работа

Vadim
25.10.2018
10:58:50

Daniel
25.10.2018
11:00:21

Vadim
25.10.2018
11:01:27

SkyCoffee
25.10.2018
11:01:29
тогда ядра в моем сообщении надо поменять на потоки (треды?)

Roman
25.10.2018
11:04:26
Смотрите на рутины как на усовершенствованые промисы, это ближе по духу будет чем то что у вас в голове
wrong! промисы не могут выполняться параллельно, а горутины будут выполнены потенциально конкурентно. Горутины скорее сравнимы с web worker'ами, но отличие в том что горутины можно создавать миллионами и они могут делить меж собой память, в то время как контексты веб воркеров изолированы и по сути представляют собой обёртку дорогих ОС потоков
так-же в JS нельзя забывать await, иначе заблокируешь системный поток (либо главный поток event loop'а, либо веб воркерский)


Pawel
25.10.2018
11:05:50
Привет, мужик захотел гуи для алгоритмического бота.
если он не будут этого бота запущать на всез осях подряд (а нафига это ему надо не понятно), то лучше сделать гуй под ту ось на которой бот будет работать.
А в Го у нас единственная либа для десктопного гуя, за которую не стыдно - lxn/walk (но я бы и на ней не стал писать гуй)
А если гуй на столько примитивен, что его можно реализовать на этой либе, то проще его на js сделать, а на Го как положено написать веб сервер
Карч зря ты это взял, выкинь нафиг это недокументированное маргинальное гавно пока не поздно, точно тебе говорю

Daniel
25.10.2018
11:05:57

Google

anatolii
25.10.2018
11:07:16

Vadim
25.10.2018
11:08:00

Roman
25.10.2018
11:08:17

Vadim
25.10.2018
11:09:11

anatolii
25.10.2018
11:09:29

Roman
25.10.2018
11:10:30

Vadim
25.10.2018
11:11:05
0xff00ff именно так. Спасибо вам всем за помощь. Буду дальше разбираться и читать доки. Хотелось просто в общих чертах понять, как параллельность работает в го. И почему ее считают одной из самых крутых на ряду с Erlang

SkyCoffee
25.10.2018
11:11:09

anatolii
25.10.2018
11:12:55

Daniel
25.10.2018
11:13:57

Roman
25.10.2018
11:15:18

Vadim
25.10.2018
11:21:36

SkyCoffee
25.10.2018
11:23:17
А можно как-то получить копию http.Response? Запрашиваю html через http.Get, проверяю, всё ли в порядке с полученным html через чтение response.Body. Хочу, если всё в порядке, передать (или вернуть) такой же response, каким он был до чтения и закрывания response.Body.

anatolii
25.10.2018
11:24:25
А не проще будет уже прочтенными данными манипулировать?
Зачем вам два раза делать одно и то же?

SkyCoffee
25.10.2018
11:24:58
проще, но всё же хочется что-то вроде middleware организовать, незаметного и возможно не единственного.

anatolii
25.10.2018
11:25:55
Тогда и реквест/респонс инкапсулируйте как-то

SkyCoffee
25.10.2018
11:29:05
https://golang.org/pkg/net/http/#ReadResponse вроде близко к тому, что я хочу, но не понимаю, как получить *bufio.Reader

Александр
25.10.2018
11:53:52
мне тут интересно
почему драйвер по типу gopkg.in/mgo.v2 не привели к стандартному интерфейсу

Google

Александр
25.10.2018
11:54:12
я про database/sql

Stepan
25.10.2018
11:56:48

Александр
25.10.2018
11:57:09
ну так полностью совместимость конечно не сделать
но на на уровне драйвера и простых запросов на изи

Stepan
25.10.2018
11:57:35

Александр
25.10.2018
11:58:32
ну удобно было бы бд переключать

Stepan
25.10.2018
11:59:30

Александр
25.10.2018
11:59:56
ну не для кастом набора же

Stepan
25.10.2018
12:00:12
ну в кастом наборе такое и не должно быть)

Александр
25.10.2018
12:04:37
ну может, у нас уже 4 бд по проектам юзается
иногда с заменой
я конечно набросал свой интерфейс, для всех

anatolii
25.10.2018
12:06:12

Александр
25.10.2018
12:06:28
у меня там все nosql
но в принципе они хорошо ложаться на интерфейс аля database/sql/driver
по крайне мере для иницилизации
я просто потом подумал что можно же попробывать на общем интерейсе сделать
и удивился что разработчики не смогли их натянуть туда

Илья
25.10.2018
12:08:49

anatolii
25.10.2018
12:08:57
Методы выборки и аргументы разные, какие же общие интерфейсы, пустые разве что

Google

Александр
25.10.2018
12:13:22
везде string идет
если и мап то он опять json и превращается в string

anatolii
25.10.2018
12:14:13
Ну и как вы представляете себе работу с этим?
Все в стринг конвертить?

Александр
25.10.2018
12:14:36
так оно и так стринг же

anatolii
25.10.2018
12:15:10
Кто она?

Александр
25.10.2018
12:15:30
func (driver *influxDriver) query(dbname string, queryString interface{}) ([]*db.Result, error) {
query := influxClient.NewQuery(queryString.(string), "", "")
response, err := driver.conn.Query(query)
....
ну вот скажем инфлакс
монгу показать?

anatolii
25.10.2018
12:15:55
Я про мго, он принимает не стринг

Александр
25.10.2018
12:16:12
ну обернуть его можно было бы в принципе
я про разработчиков

anatolii
25.10.2018
12:16:31
Да, он обернут уже и потом в бсон идет
В монге выборки могут быть очень сложные
В жс есть библиотек пара которые сделали как вы хотите, теперь пользоваться ими нельзя нормально, лишь для простых запросов

Александр
25.10.2018
12:23:51
ну окей, аргумент может и хороший
сделаю на кастом интерфейсе

Roman
25.10.2018
12:37:47
https://ripe76.ripe.net/wp-content/uploads/presentations/46-RIPE76-NetworkPipeline-2.pdf
вот вам пример от cf про использование go :)