Slava
привет
Vadim
Привет :3
Ааа, вотоноче)
Мерль
Vadim
#мерльнепродайся :)
Мерль
#мерльнепродайся :)
Ни в жисть, зуб даю, сувенирный, с кипра
Andrey
Всем привет! Пришел запрос по HTTP (го сразу в отдельную горутину выпуливает запрос) я что-то делаю, потом надо забрать результаты через некоторое время, если я в ней вызову таймер и после таймера заберу результаты, это же не криминал ), в ожидание же будет только эта горутина ?
Daniel
Только эта
Daniel
Но сама идея вышлядит странно
Daniel
Что клиент будет делать во время этого таймера
Daniel
?
Andrey
Ну скажем если это будет jquery то таймер в 10сек не сделает погоды, поглядит на крутящиеся часы)) просто длинк диагностику с порта не сразу отдает а в среднем через 5-10, а бывает и 15 секунд @onokonem
Anonymous
Через http get даёт диагностику?
Andrey
Нет по snmp, через set пишем, ждем пока опросит, потом забираем, через http планирую в crm отдать @NXShock
Roman
привет всем. Подскажите, как это красиво записать? inputFiles, _ := ioutil.ReadDir(test.inputPath) inputCount := len(inputFiles) resultFiles, _ := ioutil.ReadDir(test.resultPath) resultCount := len(resultFiles)
Roman
не, может это можно как-то сократить)
Aleksandr
nikita
ошибки не игнорируй сначала)
Slava
следующий вопрос будет, подскажите, у меня не работает, почему?
nikita
следующий вопрос будет, подскажите, у меня не работает, почему?
ошибки не игнорируй и почитай, в чем там ошибка )
nikita
а ой
Nikolay
@SolidlSnake скрапер для инстаграма на Go, вот год назад делал такое для одного проекта, можно объединить усилия и сделать что-то общее и полноценное https://github.com/xboston/go-instagram-scraper
Anonymous
⬆️ вот до чего доводит людей Go 😄
Vadim
Всем привет, сюда еще вроде как не вбрасывал, небольшое исследование на тему того как кто что мониторит и не очень https://goo.gl/forms/FuWNKOlFhwHM738u2 нужно больше ответов, чтобы хоть как-то составить картину :)
Constantine️
ну и добавить про то, что приватное апи юзается и прочее
Vadim
Ответы публичны?
ну я потом как хотя бы несколько десятков наберу начну писать про то, "как никто нихрена не мониторит" :)
Daniel
ну как минимум мы все мониторим
Мерль
#Multiplexing #Golang #Channels to Maximize Throughput | The #MongoDB Engineering Journal http://crwd.fr/2pbucgq https://pbs.twimg.com/media/C9bAZ2IXcAAiyjw.jpg
Мерль
proposal: Go 2: "result" type · Issue #19991 · golang/go https://github.com/golang/go/issues/19991
Dmitry
proposal: Go 2: "result" type · Issue #19991 · golang/go https://github.com/golang/go/issues/19991
Это прям коробка пандоры, потому что если будет result то захочется сделать паттерн матчинг(как в русте, чтоб не забыть обработать все кейсы), и вообще, если уж реализовывать такую штуку как result то нужно будет красивее поддержать алгебраические типы данных в го. Автор пропозала там кстати ссылается на https://github.com/golang/go/issues/19412 , но говорит что можно их не использовать, что как-то странно. На мой взгляд если в го такое делать то АТД нужны как воздух
Slach
Люди объясните тупому... у меня есть s строка которую я преобразовал из []byte b := []byte{16,17, } s := string(b) len(s) выдает 16 как при записи в CSV файл через encoding/csv получается больше 16 байт??? 16 байт это UUID преобразованный из строки через http://github.com/satori/go.uuid
Alexey
Добавляется перевод строки?
Slach
https://play.golang.org/p/o6GKCzs2aU хуже вместо 18 байт получаю 29
Slach
2017/04/16 12:37:14 len(s)=16 2017/04/16 12:37:14 size csv_wtf.csv = 29
Alexey
Да, уже вижу в конкурирующем чате, давай там
Мерль
2017/04/16 12:37:14 len(s)=16 2017/04/16 12:37:14 size csv_wtf.csv = 29
16 - это в сыром виде, просто байты 29 - это длина сериализованного в человекочитаемый вид uuid
Slach
29 - это длина сериализованного в человекочитаемый вид uuid это не так
Slach
в человеко читаемом было бы 36 байт UUID
Мерль
А, блин, точно
Мерль
в человеко читаемом было бы 36 байт UUID
Замени s := string (u.Bytes()) на s := u.String()
Slach
и??? мне не надо писать в CSV 36 символьную строку
Slach
мне надо именно 16 байт записать
Мерль
мне надо именно 16 байт записать
А как ты представляешь запись произвольных байт в csv файл, то есть файл текстового формата?
Мерль
А если среди этих байт будет символ разделителя?
Slach
0x0A ??? 0x0D ??? а там в encoding.csv как раз стоит проверка ... в целом вообще так то надо просто снаружи кавычки " поставить а если есть внутри кавычки " заменить на повторение ""
Slach
если внутри есть перенос строки то пусть он остается а вот если есть кавычка, то по идее она дожна быть двойной
Aleksandr
0x0A - это 4 байта)
Aleksandr
ты не можешь смешать бинарный формат и текстовый
Slach
'0x0A' это блин Rune Literal это 1 байт
Slach
я просто привел их в том виде чтобы понятно было
Slach
байт с десятичным значением 10 и байт с десятичным значением 13 может встречаться внутри UUID это файт
Slach
s := string(u.Bytes()) log.Printf("u.Bytes()=%v",u.Bytes()) for i, v := range s { log.Println(i,v) } вот такой код выводит следующее 2017/04/16 13:56:18 u.Bytes()=[225 57 60 98 135 122 74 220 143 251 241 191 10 51 124 95] 2017/04/16 13:56:18 0 65533 2017/04/16 13:56:18 1 57 2017/04/16 13:56:18 2 60 2017/04/16 13:56:18 3 98 2017/04/16 13:56:18 4 65533 2017/04/16 13:56:18 5 122 2017/04/16 13:56:18 6 74 2017/04/16 13:56:18 7 1807 2017/04/16 13:56:18 9 65533 2017/04/16 13:56:18 10 65533 2017/04/16 13:56:18 11 65533 2017/04/16 13:56:18 12 10 2017/04/16 13:56:18 13 51 2017/04/16 13:56:18 14 124 2017/04/16 13:56:18 15 95 в общем никто случайно не знает CSV пакета который умеет писать сырые байты? т.е. реально проблема в том как идет итерация по строке =(
Slach
т.е. полюбому руны при записи дают больше чем 1 байт =( для каждого байта который больше 127 идет попытка вытащить utf-8 codepoint в качестве "символа"
Aleksandr
т.е. полюбому руны при записи дают больше чем 1 байт =( для каждого байта который больше 127 идет попытка вытащить utf-8 codepoint в качестве "символа"
ну это же правильное поведение руны. руна не один байт маппит, а последовательность байтов в руну, равную символу utf-8
Aleksandr
csv - это текстовый формат. Писать туда бинарный дамп не по rfc, и соответственно вряд сторонние пакеты csv будут такое поддерживтаь. пиши сам либу
Slach
> Писать туда бинарный дамп не по rfc простите но это не так =) RFC 4180 не ограничивает содержимое строк и их кодировку он только определяет delimiter и field quoting и line breaking правила
Slach
https://tools.ietf.org/html/rfc4180#page-2
Konstantin
Отличная тема, чтобы подраться за гаражами, ящитаю.
Мерль
The ABNF grammar [2] appears as follows: file = [header CRLF] record *(CRLF record) [CRLF] header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non-escaped) escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE non-escaped = *TEXTDATA COMMA = %x2C CR = %x0D ;as per section 6.1 of RFC 2234 [2] Shafranovich Informational [Page 3] RFC 4180 Common Format and MIME Type for CSV Files October 2005 DQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2] LF = %x0A ;as per section 6.1 of RFC 2234 [2] CRLF = CR LF ;as per section 6.1 of RFC 2234 [2] TEXTDATA = %x20-21 / %x23-2B / %x2D-7E
Мерль
Смотрим на пункт в конце (TEXTDATA)
Мерль
Мерль
Вот ascii таблица для удобства
Мерль
Это раз
Мерль
Во-вторых, когда ты пишешь данные в csv.Writer, то он итерируется по рунам каждого поля. Так как ты записываешь не utf8 строку, то у тебя получается каша
Мерль
Вот здесь с куском, выдранным из csv.Writer https://play.golang.org/p/ApEks2cCnX
Мерль
Это два
Мерль
Вот здесь с куском, выдранным из csv.Writer https://play.golang.org/p/ApEks2cCnX
Там как раз получается 26 байт (- 3 байта на кавычки и точку в конце)
Slach
ну это да, тут я уже понял и ссылки на это я уже приводил и пытался как раз понять откуда WriteRune лишние байты дает разобрались... invalid unicode sequence имеет отдельную константу ;)) спасибо тыкнули мордочкой помогли определиться что делать дальше
Мерль
Пиши в csv uuid.String() и будет тебе счастие
Slach
Пиши в csv uuid.String() и будет тебе счастие
не будет ибо вставлять мне это дело надо в Clickhouse ;) у которого как раз есть оптимизация на такой случай и который подобный набор байт в CSV как раз поймет
Slach
https://clickhouse.yandex/reference_ru.html#UUIDNumToString(str)
Slach
ну и с учетом того что вставлять мне надо много
Slach
Я переписал все на []bytes
Slach
Спасибо всем за помощь
Konstantin
Можно ли как-то форматировать строку в несколько заходов? Тобишь есть строка "%s:%d" - сначала где-то заполнить %s, а в другом месте уже %d. fmt.Sprintf() не справляется.