@gogolang

Страница 1620 из 1630
Мерлин
25.10.2018
10:40:37
А сама операция асинхронная? Или блокирует I/O? Извните за тупые вопросы, но пытаюсь перестроить мышление
операция синхронная с точки зрения локального потока инструкций, IO не блокирует всё правильно, лучше задачть вопрос

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

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

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

Google
Artem
25.10.2018
10:41:09
А сама операция асинхронная? Или блокирует I/O? Извните за тупые вопросы, но пытаюсь перестроить мышление
ты можешь запустить в рутине и потом прочитать ответ когда нужно из канала

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
https://play.golang.org/p/AOvmR-kz6WR покритикуйте пожалуйста, и подскажите как исправить
нажми кнопку Format Что тебя конкретно волнует в этом коде? Зачем тебе нужен канал cloudflare_chan? Переменные надо называть через кэмел-кейс: CloudflareChan В этот кусок кода вставь недостающие куски с cloudflare_chan, rule_id и acclist, чтобы он компилировался https://play.golang.org/p/SpJdO0PcNxY

Тоесть, что бы сделать метод client.Get() асинхронным. его нужно обернуть в функцию и внутри нее работать с каналов. А вне уже чекать канал и если пришло что то, то уже продолжать обработку?
А чего ты добиться то хочешь? Если тебе нужно получить ответ на GET запрос, то тебе не нужны никакие каналы, и другие горутины не будут заблокированы всё равно

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

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, умеет в многопоточность

Pawel
25.10.2018
10:50:44
Привет, хочу поделиться опытом. Были программы на го, нужно было прилепить UI. Andlabs UI очень приятная вещь. Написал быстро и без заморочек
тебе реально нужен кросплатформенный десктопнвй гуй, который десйствительно будут юзать на разных платформах?? что за прога?

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:55:58
я думаю, умные дядьки тебе расскажут, но горутины существуют только в виртуальном пространстве рантайма го, а не в ос, как треды

соответственно, используется планировщик Go, а не ос

ну и в целом они много-много легче

Daniel
25.10.2018
10:56:24
при таком подходе параллельность достигается колличеством ядер процессора., правильно? А что бы еще раздробить параллельность в одном потоке, то это нужно использовать горутины?
на самом деле - просто сервер, который принимает заврос на вашу апишку, сразу запускает его обработку в отдельной горутине.

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

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
Roman
25.10.2018
11:08:17
Человек пришел с жс, там нет потоков, попытался максимально понятно для него.
есть там "потоки", web workers, но они изолированы и не умеют память делить

anatolii
25.10.2018
11:09:29
есть там "потоки", web workers, но они изолированы и не умеют память делить
Если чеховек хочет в го, и говорит о жс, то скорее всего он с ноды, а там их нет

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

SkyCoffee
25.10.2018
11:11:09
Думаешь там что-то плохое?
Не думаю, просто боюсь.

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

Daniel
25.10.2018
11:13:57
ну, только в go можно получить такое https://play.golang.org/p/3iDQBi7V77I
еще в перле. ну и с pointer receiver не работает, понятное дело.

Roman
25.10.2018
11:15:18
0xff00ff именно так. Спасибо вам всем за помощь. Буду дальше разбираться и читать доки. Хотелось просто в общих чертах понять, как параллельность работает в го. И почему ее считают одной из самых крутых на ряду с Erlang
потому-что тебе не нужно засорять код и голову async/await'ами и promise'ами поскольку в Go если goroutine'а блокирует - планировщик её меняет на другую автоматически не блокируя системный поток. ты пишешь блокирующий код, а выполняется он неблокирующим образом. так-же ты не ограничен как в JS воркерами, а можешь делить память между несколькими горутинами по желанию (насчёт Erlang'а я точно не знаю, но помоему там тоже есть какие-то ограничения по работе с памятью) плюс тебе не нужно помнить о том что "потоки это дорого", потому-что в Go горутины очень дешёвые в плане времени на создание, в плане памяти для stack'ов и в плане context switching'а

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
ну так полностью совместимость конечно не сделать

но на на уровне драйвера и простых запросов на изи

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

Stepan
25.10.2018
11:59:30
ну удобно было бы бд переключать
так для этого есть orm всякие)

Александр
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
ну удобно было бы бд переключать
А ты не сможешь нормально переключить sql на nosql у них разная структура данных

Александр
25.10.2018
12:06:28
у меня там все nosql

но в принципе они хорошо ложаться на интерфейс аля database/sql/driver

по крайне мере для иницилизации

я просто потом подумал что можно же попробывать на общем интерейсе сделать

и удивился что разработчики не смогли их натянуть туда

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 :)

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