@proGO

Страница 1611 из 1674
Alexey
03.08.2018
19:46:35
Т.е. если есть глобальные переменные - то все функции - замыкания:)

(хотя я не понял, что такое первого класса)

(прошел по ссылке и понял)

Никита
03.08.2018
19:48:41
по сути, замыкания - функция, возвращающая другую функцию?

Google
Alexey
03.08.2018
19:49:44
по сути, замыкания - функция, возвращающая другую функцию?
Нет, замыкания - это функции, внутри которых используются внешние переменные)

var a int func doIt() { a++ }

вот это - замыкание

Никита
03.08.2018
19:50:17
Окей. Если я передам в функцию указатель на переменную, это будет замыканием?

Alexey
03.08.2018
19:50:52
Если передать - то он копируется (переменная-указатель, не сама переменная), это не замыкание, это просто передача аргументов

Daniel
03.08.2018
20:22:31
Т.е. если есть глобальные переменные - то все функции - замыкания:)
нет, тут важно, что переменная локальная, и, соответственно, для каждого замыкания можно подсунуть свой экземпляр. но с глобальными тоже работает, да

Окей. Если я передам в функцию указатель на переменную, это будет замыканием?
нет, это будет агрумент. замыкание - это именно использование внешней переменной

Alexander
03.08.2018
23:34:15
Всем привет, два дня уже пишу на го, написал что хотел очень быстро - понравилось, но почему-то программа отжирает cpu даже больше чем аналогичная питоновская https://gist.github.com/inv2004/dcc638afccecdc3fc5c2f462e8453248

Я уже и смотрел pprof - что-то с укладыванием в bson данных. Уже пробовал и убирать канал и менял драйвер и обновлял go - ничего не поменялось.

А, в заключении вообще Message на map[string]interface{} заменил - ничего не поменялось. А скорость всего около 10 сообщений в секунду. Откуда такие тормоза? Вот чего-чего, а такого не ожидал и хз куда копать.

Alexei
04.08.2018
04:01:21
WTF?

Google
Alexander
04.08.2018
05:53:48
В сторону понимая pprofа
я пруфил. в случае монги она все силы бросало на сериализацию bson (зачем???) причём json мелкий совсем.

сейчас я переключился для проверки с mgo на rethinkdb - CPU упал до 20%, что куда лучше, но всё равно очень много .

Alexander
04.08.2018
05:59:07
я отключил вообще вставку в базу - оно 2% CPU ест. т.е. по сути просто принимая 10-20 мелких json из ws.

Может какой-то json не тот? Я уже не знаю что думать.

Alexander
04.08.2018
07:28:08
Vadim
04.08.2018
07:30:34
Думал что без них проще
Можете сделать глобальную переменную и закидывать туда, но я вас уверяю, что каналы не просто так придумали. Код с каналами читабелен, более безопасен, и, если честно, я первый раз вижу мысль, что без каналов будет проще.

Alexander
04.08.2018
07:35:59
Можете сделать глобальную переменную и закидывать туда, но я вас уверяю, что каналы не просто так придумали. Код с каналами читабелен, более безопасен, и, если честно, я первый раз вижу мысль, что без каналов будет проще.
https://nathanleclaire.com/blog/2014/02/21/how-to-wait-for-all-goroutines-to-finish-executing-before-continuing-part-two-fixing-my-ooops/ я нашел такую статью, очень похоже на то что мне надо. Сделаю по аналогии

Igor
04.08.2018
08:41:47
Размышлял как сделать эмуляцию наследования в гошечке. Есть структура type user struct {name string} У user есть метод Info() который вызывает метод FullName(), который в свою очередь возвращает поле name. Определяем новую структуру client в которою анонимно помещаем user и добавляем поле lastname. type client struct {user; lastname string} И добавляем для client метод FullName() который теперь будет возвращать name+lastname. Что будет если вызвать user.Info()? Он вызовет FullName и вернёт поле name. Что будет если вызвать client.Info()? Снова вернётся только поле name (по вполне понятным причинам), а client.FullName останется не у дел. Пример https://play.golang.org/p/UidY7CJBXi7 И лёгким движением руки заставляем вызов метода client.Info() без переопределения оного использовать client.FullName() и вернуть name+lastname. https://play.golang.org/p/T18QPsdUkOP

Dorian
04.08.2018
08:50:38
Простите, но:

Где здесь наследование?

Зачем в "гошечке" наследование?

Igor
04.08.2018
08:51:54
Вопрос зачем не стоял)

Igor
04.08.2018
08:54:29
Вы изобрели встраивание ?
Нет, вы не прочитали. Встраивание есть по умолчанию и оно не позволяет "переопределить" метод у встраиваемого объекта, что я писал целый абзац.

Dorian
04.08.2018
08:56:40
Ну да, зато можно определить такой же метод у верхней структуры. В вашем примере клиент должен был вывести Джек Блэк?

> User Info: Jack Daniels Client Info: Jack

Google
Igor
04.08.2018
08:57:40
Да, ожидаемое поведение для языков где есть наследование, такое

Dorian
04.08.2018
08:58:15
А простите, я не тот пример смотрю

Igor
04.08.2018
08:59:04
По первой ссылке - "проблема". По второй "решение". Ессно всё ради забавы

Dorian
04.08.2018
09:02:14
А чего в решении функции описываются при создании клиента? В этом есть какой -то нюанс?

Igor
04.08.2018
09:07:25
Возможно это лишнее, но в данном случае это позволяет в рантайме переписать указатель функции у "родителя" (встраиваемого объекта)

Dorian
04.08.2018
09:14:16
При конкурентных запросах на 32 строке, например, с будет легко переписываться между реквестами и вы получите очень неприятное поведение между клиентами, когда для одного выполняется то что внутри Info, а для другого NewClient. По этому, нужно передавать в функцию явно клиента, если я не ошибась.

Igor
04.08.2018
09:19:54
Про конкурентность я даже забыл. Значит нужны доработки)

Daniel
04.08.2018
09:20:09
коллега, зачем это все?

Dorian
04.08.2018
09:20:10
Предлагаю не делать этого :)

Roman
04.08.2018
09:20:31
Вопрос зачем не стоял)
Напомнило человека который сделал промисы в го

Igor
04.08.2018
09:21:37
коллега, зачем это все?
Разминка мозга и только лишь

Sergey
04.08.2018
09:32:47


Надо заменить все вхождения в строке ток не глобальные синие а именно зеленые

Первой группы

Как блин это сделать

Просто ReplaceAllString заменяет ток синие:(

Лемур
04.08.2018
10:06:51
Как блин это сделать
https://play.golang.org/p/D0irION37T5

Используй группы

Alexander
04.08.2018
12:38:17
а в го есть какие нибудь переменные глобальные для пакета? например я хочу их присвоить внутри init и потом использовать

Dorian
04.08.2018
12:39:33
var variable Type вне функции

Google
Daniel
04.08.2018
12:40:08
тем не менее - без пакетных переменных не обойтись.

Sergey
04.08.2018
12:40:15
https://play.golang.org/p/D0irION37T5
Пасеба, это не совсем то, но через replaceAllStringsFunc

тем не менее - без пакетных переменных не обойтись.
Ну да, конечно, но пихать все глобально

И пробрасывать между пакетами

Такое

Alexander
04.08.2018
12:41:01
ругается чета

блин скриншот грузится еще

Dorian
04.08.2018
12:43:11
Если посмотреть какой нибудь fmt или log, то вполне приемлемо, но с мьютексами

Zver
04.08.2018
12:43:14
На что там может ругаться то.

Dorian
04.08.2018
12:44:05
На что там может ругаться то.
Например на одинаковое название переменной и пакета... Можно поугадывать, пока грузится :)

Alexander
04.08.2018
12:45:50
https://play.golang.org/p/0VYyd7QkJTi

Zver
04.08.2018
12:46:08
Вообще вопросы дурацкие. Так сложно тур пройти, прочитать effective go. Про конкуренцию. Все основное в гошном бложике есть.

У вас имя не то

Alexander
04.08.2018
12:46:59
надо побыстрому прототип накидать

Combot
04.08.2018
12:47:12
Alexander Andreev (0) увеличил репутацию Zver (1)

Google
Dorian
04.08.2018
12:47:21
https://play.golang.org/p/0VYyd7QkJTi
А вы, как я понял, не глянув гидов начали писать что-то серьезное на Go?

Zver
04.08.2018
12:48:08
Там тур пройти, бложик гошный почитать сутки надо.

А то уже несколько суток пишите, примитивные вопросы задаете.

Dorian
04.08.2018
12:51:35
Я тут нахожусь меньше суток, но тоже обратил внимание на сей факт :)

Не в обиду спрашивающему

Zver
04.08.2018
12:52:31
Меньше бы времени ушло на чтение документации.

Alexander
04.08.2018
13:02:56
прошу прощения что отнимаю время у илиты своими глупыми вопросами

Daniel
04.08.2018
13:03:21
просто пройдите gp tour - и будем в расчете :)

Roman
04.08.2018
14:01:11
компилятор Go имплементирует copy elision & return value optimization?

Zver
04.08.2018
14:27:39
прошу прощения что отнимаю время у илиты своими глупыми вопросами
Тут дело не в отнимании времени, да и какая элита, а в том, что задаете примитивные совсем вопросы, которые не возникли бы, загляни вы в документациию.

Alexander
04.08.2018
14:59:20
Сделайте буферизированный канал
Пробовал - никакой разницы.

Страница 1611 из 1674