Slava
привет
Vadim
Мерль
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)
Aleksandr
Roman
не, может это можно как-то сократить)
Aleksandr
nikita
ошибки не игнорируй сначала)
Slava
следующий вопрос будет, подскажите, у меня не работает, почему?
nikita
nikita
а ой
Nikolay
@SolidlSnake скрапер для инстаграма на Go, вот год назад делал такое для одного проекта, можно объединить усилия и сделать что-то общее и полноценное https://github.com/xboston/go-instagram-scraper
Konstantin
Anonymous
⬆️ вот до чего доводит людей Go 😄
Vadim
Всем привет, сюда еще вроде как не вбрасывал, небольшое исследование на тему того как кто что мониторит и не очень https://goo.gl/forms/FuWNKOlFhwHM738u2
нужно больше ответов, чтобы хоть как-то составить картину :)
Oleg
Constantine️
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 , но говорит что можно их не использовать, что как-то странно. На мой взгляд если в го такое делать то АТД нужны как воздух
Kirill
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
Да, уже вижу в конкурирующем чате, давай там
Slach
29 - это длина сериализованного в человекочитаемый вид uuid
это не так
Slach
в человеко читаемом было бы 36 байт
UUID
Мерль
А, блин, точно
Slach
и??? мне не надо писать в CSV 36 символьную строку
Slach
мне надо именно 16 байт записать
Мерль
А если среди этих байт будет символ разделителя?
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
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
Мерль
Это два
Мерль
Slach
ну это да, тут я уже понял
и ссылки на это я уже приводил и пытался как раз понять откуда WriteRune лишние байты дает
разобрались... invalid unicode sequence имеет отдельную константу
;)) спасибо тыкнули мордочкой помогли определиться что делать дальше
Мерль
Пиши в csv uuid.String() и будет тебе счастие
Slach
https://clickhouse.yandex/reference_ru.html#UUIDNumToString(str)
Slach
ну и с учетом того что вставлять мне надо много
Slach
Я переписал все на []bytes
Slach
Спасибо всем за помощь
Konstantin
Можно ли как-то форматировать строку в несколько заходов?
Тобишь есть строка "%s:%d" - сначала где-то заполнить %s, а в другом месте уже %d.
fmt.Sprintf() не справляется.