Chebyrash
Зачем создавать копию?
Anonymous
Зачем создавать копию?
Чтобы не испортить оригинал ))
Илья
Зачем создавать копию?
https://github.com/golang/go/wiki/Range
Anonymous
Anonymous
те даже без индекса копируется
Anonymous
Коллеги, но мы так и не ответили на вопрос "зачем".
Daniel
что - зачем?
Aleksandr
потому что, не копируя слайс, мы можем изменить его, что приведет к неожиданному поведению range
Chebyrash
Так это про другое.. Копирование items не происходит.
Aleksandr
ну? еще
Michael
состояние коллекции фиксируется перед range
Илья
https://play.golang.org/p/XmkZEG4ibg
Илья
что? кто? какой evaluate? вы из питона?
Илья
Да (
добро пожаловать!
Илья
:)
Chebyrash
Спасибо )
Chebyrash
Я просто к тому что мы заранее знаем сколько раз пройдется for loop и это никак не изменить (?)
Chebyrash
Тогда смысл делать копию?
Chebyrash
Простите за нубские вопросы
Aleksandr
Тогда смысл делать копию?
копия именно для этого и делается
Илья
если размер слайса/массива не захардкожен?
Chebyrash
когда именно мы это знаем?
В строчке где есть range
Илья
эмм, и как компилятор должен об этом догадаться? :)
Chebyrash
если размер слайса/массива не захардкожен?
Если мы что-то удалим то вылетим с out of range
Илья
ну т.е. в каком-то варианте, может и знать, но для более общего сценраия - проще делать копии
Илья
Если мы что-то удалим то вылетим с out of range
и это будет WAT? слайд на презентации :)
Chebyrash
Мы точно знаем размер слайса до начала for loop, так? range даёт нам его размер, так? Но range исполняется один раз, так? Тем самым мы точно знаем сколько раз мы пройдемся по этому слайсу и если мы что-то удалим в процессе то вылетим с out of range...
Chebyrash
Предполагаю ибо не совсем понимаю зачем создавать копию.. В других языках тоже создаётся копия?
Aleksandr
Предполагаю ибо не совсем понимаю зачем создавать копию.. В других языках тоже создаётся копия?
создаем копию, чтобы изменения исходного слайса не влияло на выпоолнение range. Удалив элемент, мы не вылетим с out of range, т.к. работаем с копией
Chebyrash
Так, понял. Спасибо.
maxOn
привет всем , ребят этот чатик если что для нубов пойдет или есть отдельный?
Daniel
если что - пойдет
Daniel
но спецом для нубов в слаке есть канал  school
Anonymous
Ребят, вопрос об обновлении бинарика на серваке. Кто как делает? Не ручками же это всё перекидывать
Anonymous
Что почитать, куда капнуть?
Daniel
скорее continious delivery
Anonymous
Понял, посмотрю что там, да как, спасибо
Anonymous
https://4gophers.ru/slack/
Oleg
Посоветуйте. Допустим есть сервис, который подключается к другому сервису по вебсокетам. Посылаем сообщения в режиме реквест-реплай с одним соединением на весь сервис. Хочется иметь простой линейный прикладной код с такими асинхронными запросами.
Anonymous
а в чем вопрос - послал запрос и ждешь ответ с тайматом.
Anonymous
сначала дергаешь отправку, потом вешаешь обработчик-получатель который прервется через некорое время
Oleg
Соединение полнодуплексное
Oleg
Обычно какой-то обсервабл юзается с семантикой подписки
Anonymous
request_id какойто задать, который и в ответ будет возвращаться. и считать ответом только сообщение с совпадающим реквестом. я писал клиента на жс и сервер на сокетах
Anonymous
щас попробую вспомнить какая там логика при ожидания ответа была
Oleg
Есть кусок кода с наиболее красивой реализацией?
Anonymous
там промисы на жсе
Oleg
Мне голанг нужен
Oleg
в идеале иметь линейную семантику типа id = await Send() res = await Response(id)
Oleg
чтобы без callback/promise и прочей мутоты
ceiling cat
Господа, начинающий гофер просит совета. Совсем недавно начал изучение, до этого писал на пайтоне и потихоньку разбираюсь с типизацией. В чём суть, есть у меня лог-файлы, которые необходимо загнать в эластик сёрч. Загоняю я с помощью _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
в идеале иметь линейную семантику типа id = await Send() res = await Response(id)
Так у тебя итак это будет вроде, только синхронно
Vasily
Господа, начинающий гофер просит совета. Совсем недавно начал изучение, до этого писал на пайтоне и потихоньку разбираюсь с типизацией. В чём суть, есть у меня лог-файлы, которые необходимо загнать в эластик сёрч. Загоняю я с помощью _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
Так у тебя итак это будет вроде, только синхронно
синхронно мне не надо. мне надо асинхронно но линейно. Ткни на код
ceiling cat
Именно. Я "костыльно" создаю строку в конечном результате, делая сперва map[string]interface{} тип, который потом маршалю и вызываю string этого маршала. Есть идея этот map[string]interface{} заменить на сразу строку. Подставляя значения через fmt.Sprintf, но не уверен. Это будет правильно?
Oleg
да дайте уже кусок кода что-ли
Vasily
https://golang.org/pkg/encoding/json/#Encoder и вот сюда ещё рекомендую посомтреть
ceiling cat
Благодарю за ссылку. Бегло посмотрел, как я понимаю, это не подходит, он пишет в io.Writer. А мне api библиотеки эластика позволяет просто отправлять строку, применяемую к Es.Client
Oleg
Господа, начинающий гофер просит совета. Совсем недавно начал изучение, до этого писал на пайтоне и потихоньку разбираюсь с типизацией. В чём суть, есть у меня лог-файлы, которые необходимо загнать в эластик сёрч. Загоняю я с помощью _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
ceiling cat
Благодарю, но в конечном результате мне надо делать strings.Join(events, '\n'). То есть, jsonRawMessage кастить в строку и наоборот
Yura
Всем привет) А дебажить го можно как Java, c например?)
ceiling cat
Я дебажу в Goglang IDE
Anonymous
Всем привет) А дебажить го можно как Java, c например?)
Да, ставишь IDE и в нём отлично дебажится.
ceiling cat
Но evaluate expression пока что криво работает (нету поддержки вызова функций)
Yura
Ок спасиб) А то чето где-то прочитал что чето там не то
Yura
)
Oleg
Благодарю, но в конечном результате мне надо делать strings.Join(events, '\n'). То есть, jsonRawMessage кастить в строку и наоборот
Вообще, вопрос не понят ) в чем глупость, почему marshal это костыль? Быстрое решение перевода данных в json? Не устраивает скорость из стандартной либы?