
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?

Vladimir
04.08.2018
05:43:36

Google

Alexander
04.08.2018
05:53:48
В сторону понимая pprofа
я пруфил. в случае монги она все силы бросало на сериализацию bson (зачем???) причём json мелкий совсем.
сейчас я переключился для проверки с mgo на rethinkdb - CPU упал до 20%, что куда лучше, но всё равно очень много .

Sergey
04.08.2018
05:55:27

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

Евгений
04.08.2018
07:23:17

Vadim
04.08.2018
07:24:58

Alexander
04.08.2018
07:28:08

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

Dorian
04.08.2018
07:31:20

Alexander
04.08.2018
07:35:59


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
Вопрос зачем не стоял)

Dmitriy
04.08.2018
08:52:39


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
Используй группы

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

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

Google

Sergey
04.08.2018
12:39:41

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

Sergey
04.08.2018
12:40:15
И пробрасывать между пакетами
Такое

Alexander
04.08.2018
12:41:01
ругается чета
блин скриншот грузится еще

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

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

Daniel
04.08.2018
12:43:45

Dorian
04.08.2018
12:44:05

Sergey
04.08.2018
12:44:37

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

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