
Mush
18.09.2017
12:05:49
но про это как и про все остальное тоже написано на сайтике
http://go-database-sql.org/retrieving.html
http://www.golangprograms.com/data-structure-and-algorithms.html
http://www.golangprograms.com/data-structure-and-algorithms/golang-program-for-implementation-of-linear-search.html
range не дает никакой оверхед при линейном поиске?
в какой-то древней статье жаловались что он кажется копирует данные.
по бенчмаркам я пробовал именно тайминги между ренджем и просты перебором через цикл одинаковы.

Google

Илья
18.09.2017
12:17:06
for _, item := range datalist - такая форма делает копию
но, типо аллокация на стэке, и, если у тебя там не массив из болльших объектов, не должно быть принципиальной разницы
я, если не уверен в размере, итерируюсь просто через for num := range

xPushkin
18.09.2017
12:19:47

Илья
18.09.2017
12:20:28
for counter, item := (создает локальную копию слайса/массива)

xPushkin
18.09.2017
12:21:25
Зачем создавать копию?

Andrew
18.09.2017
12:24:08

Илья
18.09.2017
12:24:18

Mush
18.09.2017
12:25:51
те даже без индекса копируется

Andrew
18.09.2017
12:26:49
Коллеги, но мы так и не ответили на вопрос "зачем".

Daniel
18.09.2017
12:27:44
что - зачем?

Aleksandr
18.09.2017
12:27:44
потому что, не копируя слайс, мы можем изменить его, что приведет к неожиданному поведению range

Google

xPushkin
18.09.2017
12:27:50
Так это про другое.. Копирование items не происходит.

Andrew
18.09.2017
12:28:18

Aleksandr
18.09.2017
12:28:34

xPushkin
18.09.2017
12:28:47

Aleksandr
18.09.2017
12:29:07
ну? еще

Michael
18.09.2017
12:29:53
состояние коллекции фиксируется перед range

Илья
18.09.2017
12:30:21
https://play.golang.org/p/XmkZEG4ibg
что? кто? какой evaluate? вы из питона?

xPushkin
18.09.2017
12:31:25

Илья
18.09.2017
12:31:51
:)

xPushkin
18.09.2017
12:31:56
Спасибо )
Я просто к тому что мы заранее знаем сколько раз пройдется for loop и это никак не изменить (?)

Aleksandr
18.09.2017
12:32:59

xPushkin
18.09.2017
12:33:32
Тогда смысл делать копию?

Илья
18.09.2017
12:33:45

xPushkin
18.09.2017
12:33:48
Простите за нубские вопросы

Aleksandr
18.09.2017
12:34:01

Google

Илья
18.09.2017
12:34:04
если размер слайса/массива не захардкожен?

xPushkin
18.09.2017
12:34:11

Илья
18.09.2017
12:34:30
эмм, и как компилятор должен об этом догадаться? :)

xPushkin
18.09.2017
12:34:46

Илья
18.09.2017
12:35:07
ну т.е. в каком-то варианте, может и знать, но для более общего сценраия - проще делать копии

xPushkin
18.09.2017
12:37:37
Мы точно знаем размер слайса до начала for loop, так? range даёт нам его размер, так? Но range исполняется один раз, так? Тем самым мы точно знаем сколько раз мы пройдемся по этому слайсу и если мы что-то удалим в процессе то вылетим с out of range...

Aleksandr
18.09.2017
12:39:11

xPushkin
18.09.2017
12:39:49
Предполагаю ибо не совсем понимаю зачем создавать копию.. В других языках тоже создаётся копия?

Aleksandr
18.09.2017
12:40:55

xPushkin
18.09.2017
12:41:41
Так, понял. Спасибо.

makas
18.09.2017
14:00:20
привет всем , ребят этот чатик если что для нубов пойдет или есть отдельный?

Daniel
18.09.2017
14:01:21
если что - пойдет
но спецом для нубов в слаке есть канал school

Momano
18.09.2017
14:08:34
Ребят, вопрос об обновлении бинарика на серваке. Кто как делает? Не ручками же это всё перекидывать
Что почитать, куда капнуть?

AxiS
18.09.2017
14:11:44

Daniel
18.09.2017
14:14:10
скорее continious delivery

Momano
18.09.2017
14:15:10
Понял, посмотрю что там, да как, спасибо

makas
18.09.2017
14:21:46

Google

Momano
18.09.2017
14:31:41
https://4gophers.ru/slack/

Oleg
18.09.2017
17:01:29
Посоветуйте. Допустим есть сервис, который подключается к другому сервису по вебсокетам. Посылаем сообщения в режиме реквест-реплай с одним соединением на весь сервис. Хочется иметь простой линейный прикладной код с такими асинхронными запросами.

Mush
18.09.2017
17:02:13
а в чем вопрос - послал запрос и ждешь ответ с тайматом.
сначала дергаешь отправку, потом вешаешь обработчик-получатель который прервется через некорое время

Oleg
18.09.2017
17:02:44
Соединение полнодуплексное
Обычно какой-то обсервабл юзается с семантикой подписки

Mush
18.09.2017
17:04:40
request_id какойто задать, который и в ответ будет возвращаться. и считать ответом только сообщение с совпадающим реквестом.
я писал клиента на жс и сервер на сокетах
щас попробую вспомнить какая там логика при ожидания ответа была

Oleg
18.09.2017
17:05:33
Есть кусок кода с наиболее красивой реализацией?

Mush
18.09.2017
17:07:14
там промисы на жсе

Oleg
18.09.2017
17:08:01
Мне голанг нужен
в идеале иметь линейную семантику типа
id = await Send()
res = await Response(id)
чтобы без callback/promise и прочей мутоты


in favor
18.09.2017
17:49:44
Господа, начинающий гофер просит совета. Совсем недавно начал изучение, до этого писал на пайтоне и потихоньку разбираюсь с типизацией. В чём суть, есть у меня лог-файлы, которые необходимо загнать в эластик сёрч. Загоняю я с помощью _bulk api. Соответственно, в запрос попадает строка формата
"{"index": {"_index": "myindex"}}"\n
{"key":"val" . . . }\n"
И проблема в том, что изначально, я создаю структуру вида map[string]interface{}, где загоняю туда данные разных форматов (это именно документ), а вот мета данные у меня сразу идут строкой:
metaData := fmt.Sprintf("{\"index\": {\"_index\": \"%s\", \"_type\": \"csv\"}}", providerIndex)
Затем делаю
q, _ := json.Marshal(providerEvent);
linesPool = append(linesPool, strings.Join([]string{metaData, string(q)}, "\n"))
, чтобы соединить их \n, и в конце отправляю уже. Мне это кажется очень глупым, но я не могу придумать более быстрого решения, без костылей в виде marshal.

Vladislav
18.09.2017
17:51:33


Vasily Romanov
18.09.2017
17:58:25
Господа, начинающий гофер просит совета. Совсем недавно начал изучение, до этого писал на пайтоне и потихоньку разбираюсь с типизацией. В чём суть, есть у меня лог-файлы, которые необходимо загнать в эластик сёрч. Загоняю я с помощью _bulk api. Соответственно, в запрос попадает строка формата
"{"index": {"_index": "myindex"}}"\n
{"key":"val" . . . }\n"
И проблема в том, что изначально, я создаю структуру вида map[string]interface{}, где загоняю туда данные разных форматов (это именно документ), а вот мета данные у меня сразу идут строкой:
metaData := fmt.Sprintf("{\"index\": {\"_index\": \"%s\", \"_type\": \"csv\"}}", providerIndex)
Затем делаю
q, _ := json.Marshal(providerEvent);
linesPool = append(linesPool, strings.Join([]string{metaData, string(q)}, "\n"))
, чтобы соединить их \n, и в конце отправляю уже. Мне это кажется очень глупым, но я не могу придумать более быстрого решения, без костылей в виде marshal.
не очень понял
хочется максимально производительно батч с данными создать для отправки или что ?


Oleg
18.09.2017
18:00:12

in favor
18.09.2017
18:01:25
Именно. Я "костыльно" создаю строку в конечном результате, делая сперва map[string]interface{} тип, который потом маршалю и вызываю string этого маршала. Есть идея этот map[string]interface{} заменить на сразу строку. Подставляя значения через fmt.Sprintf, но не уверен. Это будет правильно?

Vladislav
18.09.2017
18:03:01

Oleg
18.09.2017
18:04:47
да дайте уже кусок кода что-ли

Google

Vasily Romanov
18.09.2017
18:07:41
https://golang.org/pkg/encoding/json/#Encoder
и вот сюда ещё рекомендую посомтреть

in favor
18.09.2017
18:11:00
Благодарю за ссылку. Бегло посмотрел, как я понимаю, это не подходит, он пишет в io.Writer. А мне api библиотеки эластика позволяет просто отправлять строку, применяемую к Es.Client


Mars
18.09.2017
18:18:33
Господа, начинающий гофер просит совета. Совсем недавно начал изучение, до этого писал на пайтоне и потихоньку разбираюсь с типизацией. В чём суть, есть у меня лог-файлы, которые необходимо загнать в эластик сёрч. Загоняю я с помощью _bulk api. Соответственно, в запрос попадает строка формата
"{"index": {"_index": "myindex"}}"\n
{"key":"val" . . . }\n"
И проблема в том, что изначально, я создаю структуру вида map[string]interface{}, где загоняю туда данные разных форматов (это именно документ), а вот мета данные у меня сразу идут строкой:
metaData := fmt.Sprintf("{\"index\": {\"_index\": \"%s\", \"_type\": \"csv\"}}", providerIndex)
Затем делаю
q, _ := json.Marshal(providerEvent);
linesPool = append(linesPool, strings.Join([]string{metaData, string(q)}, "\n"))
, чтобы соединить их \n, и в конце отправляю уже. Мне это кажется очень глупым, но я не могу придумать более быстрого решения, без костылей в виде marshal.
https://golang.org/pkg/encoding/json/#RawMessage


in favor
18.09.2017
18:45:34
Благодарю, но в конечном результате мне надо делать strings.Join(events, '\n'). То есть, jsonRawMessage кастить в строку и наоборот

Yura
18.09.2017
18:46:45
Всем привет) А дебажить го можно как Java, c например?)

in favor
18.09.2017
18:47:34
Я дебажу в Goglang IDE

Andrew
18.09.2017
18:47:38

in favor
18.09.2017
18:48:06
Но evaluate expression пока что криво работает (нету поддержки вызова функций)

Yura
18.09.2017
18:48:15
Ок спасиб) А то чето где-то прочитал что чето там не то
)

Mars
19.09.2017
01:59:55

in favor
19.09.2017
06:22:38
Потому что в конечном результате я посылаю строку, ибо мне надо джойнить документы символом \n, для чего я и использую строки

Andrey
19.09.2017
07:08:53
как из джуна вырасти в сеньера? что для этого надо сделать?

Stas
19.09.2017
07:11:28