
Alexey
26.02.2018
20:27:55
Похоже, что bytes.Buffer и пакет binary

Michael
26.02.2018
20:28:22

Alexey
26.02.2018
20:28:32
Типа binary.BigEndian.Read

Michael
26.02.2018
20:29:25
та может там и liitle endian & mixed

Google

Michael
26.02.2018
20:29:44
или bcd & gsm7

Alexey
26.02.2018
20:29:59
Конечно. Это просто пример, который не сразу виден в документации

Nik
26.02.2018
20:30:13

Alexey
26.02.2018
20:30:48
Там есть Read, который может читать сразу много полей в структуру
Ну и bytes.Buffer тоже поможет

Nik
26.02.2018
20:31:10
А в обратку он умеет?

Alexey
26.02.2018
20:31:28
Write тоже есть

Nik
26.02.2018
20:32:03

Alexey
26.02.2018
20:33:15
https://golang.org/pkg/encoding/binary/#Read

Nik
26.02.2018
20:33:43
а, он от пакета пляшет, спс.

Vasily Romanov
26.02.2018
20:34:03
https://blog.golang.org/survey2017-results

Nik
26.02.2018
20:36:49

Google

Alexey
26.02.2018
20:38:22
Не будет работать со строками, скорее всего
Со слайсами байт – будет

Daniel
26.02.2018
20:41:11

Nik
26.02.2018
20:41:36
Но [n]byte как тип человечески к стрингам кажется не приводился к стрингам по моему посдлденему опыту. Пойду попробую еще раз

Kirill
26.02.2018
20:41:51

Nik
26.02.2018
20:42:02
cannot convert data.Mine (type [3]byte) to type string ?

Daniel
26.02.2018
20:42:54
это не слайс, а массив

Kirill
26.02.2018
20:42:57

Daniel
26.02.2018
20:43:18
а мог бы дать парню погуглить

Nik
26.02.2018
20:43:33

Kirill
26.02.2018
20:44:26
?

Nik
26.02.2018
20:44:48
-200 строк из кода, хороший вечер)

Kirill
26.02.2018
20:46:30
кстати, @onokonem, мне нужны твои ~мозги~ мысли по одному поводу)

Daniel
26.02.2018
20:46:39
давай

Kirill
26.02.2018
20:46:45
в личку закину, минуту

Daniel
26.02.2018
20:46:50
ок

Google

Kirill
26.02.2018
20:48:27
закинул

Wingman
26.02.2018
20:49:14
народ, а что будет быстрее и правильнее?
1) if strings.HasPrefix('xe') || strings.HasPrefix('ge') || strings.HasPrefix('te') ............... { }
2) регулярка типа ^(xe|ge|te|....) ?

Kirill
26.02.2018
20:51:07
я бы делал, грубо говоря,
len(str) >= 2 && str[1] == 'e' && (str[0] == 'x' || str[0] == 'g' || str[0] == 't')

Wingman
26.02.2018
20:51:34
не

Kirill
26.02.2018
20:51:38
но, возможно, за такой код меня уже кто-то ненавидит :))

Wingman
26.02.2018
20:51:53
пример тебя ввел в заблуждение, там совсем не обязательно [1] == 'e' )
любые 2-3 первых символа могут быть, которые необходимо отматчить
до десятка в одном if

Daniel
26.02.2018
20:52:29

Kirill
26.02.2018
20:53:34

Илья
26.02.2018
20:54:12
Switch по первым двум символам, в case их можно перечислить

Daniel
26.02.2018
20:54:17

Wingman
26.02.2018
20:55:20

Kirill
26.02.2018
20:55:31
но это не так читаемо
и вряд ли у тебя будет случай, когда ты бы упёрся в регулярку, которую тебе на прототип хватит с головой, а переделать ты после замеров успеешь практически всегда

Wingman
26.02.2018
20:56:35
да не, не упрусь-то точно
блин
да это ващщщще некритичный участок
просто решил спросить, как оптимальнее :)

Google

Илья
26.02.2018
20:57:24
Ну, регулярка тут оверкилл страшный

Wingman
26.02.2018
20:57:38

Илья
26.02.2018
20:58:24
Тоже верно

Daniel
26.02.2018
20:58:41
если кому-то охота упороться

Илья
26.02.2018
21:00:35

Wingman
26.02.2018
21:00:53
ну да, вариант

Daniel
26.02.2018
21:01:33
не надо делать микробенчи. не надо. надо померять интегральную производительность, и все остальное делать тольео есть ее не хватает

Kirill
26.02.2018
21:02:53
строго говоря, там обычный memhash

Admin
ERROR: S client not available

Kirill
26.02.2018
21:12:16
но 14 операций + 7 конвертаций - больше, чем 6 конвертаций (которые оптимизируются compile-time) и 11 операций
(ref: runtime/hash64.go#L31, encoding/binary/binary.go#L77-78)

Nik
26.02.2018
21:39:55
Вопрос обратный возник - как перегнать string в [n]bytes? я сходу ответ ненагуглил
ваиринат с copy не позволяет это почеловечески записать в структуру без временных переменных

Aleksandr
26.02.2018
21:44:38
[strlen(...)]byte(str)
Как нибудь так

Nik
26.02.2018
21:45:13
[4]byte("ABCD"),
не летит

Aleksandr
26.02.2018
21:45:35
Демку сделай

Google

Nik
26.02.2018
21:45:56
ща
https://play.golang.org/p/rfPHOyi7PJP

Kirill
26.02.2018
21:47:29

Nik
26.02.2018
21:48:19
в формат header := Header{
Type: [4]byte("ABCD"),
} это не ложится, но тоже вариант, спс

Kirill
26.02.2018
21:48:57
блин, Ник
а ты не думал, что обёртку написать можно, например?

Nik
26.02.2018
21:49:45
Да я сижу переламываю работу с сообщениями на binary.Read. И вылезают вот коллизии, дщумаю как крассивее их собрать
(а такой красивый был)
сеттеры и геттеры еще с явы вызывают у меня ненависть

Kirill
26.02.2018
21:50:59
https://play.golang.org/p/U32tU1-9jnb

Nik
26.02.2018
21:53:04

Wingman
26.02.2018
22:20:37
ого
сюрприз для меня
парсю огромный аутпут ; по мере парсинга - всё дико замедляется и тормозит
ковырял регекспы, тестил, мучался... оказалось, что дико медленная штука - конкатенация строки
типа result += currentString
(просто мысли вслух :)

Владимир
26.02.2018
22:21:58
Чем конкатенацию заменил в итоге?

Aleksandr
26.02.2018
22:22:01
а bytes buffer например? или string buffer из 1.10?

Wingman
26.02.2018
22:22:06

Nik
26.02.2018
22:22:11

Daniel
26.02.2018
22:22:23