Kirill
Даже со стандартным json вы скорее упретесь в сетевую карту чем во что-либо другое
Vasily
Если ты не контролируешь что тебе прийдёт и прийти может без easyjson-методов, то это вариант
Vasily
нет, не упрёмся
Vasily
мы потому easyjson и написали
Kirill
код покажите
Vasily
говорю же, сделай просто json.Unmarshal
Vasily
он вызовет нужный метод
Vasily
не будет у тебя такой большой просадки производительности
Vasily
во всяком случае будет сильно быстрее чем стандартный маршалер использовать
Vasily
да
Vasily
он достанет нужный метод у структуры если он есть
Vasily
да, чуть-чуть рефлекта, но зато не придётся сильно с кодом морочиться
Vasily
универстальыне - это как ?
Vasily
всё через интерфейсы
Vasily
пых - динамический язык, в го такое не так просто сделать
Ivan
хочешь универсальность? Забудь, в го её нету особо. Максимум, это можешь создать разные структура и привязать к ней один интерфейс с нужным методом
Ivan
который реализуешь в каждой структуре
Vasily
ты можешь вовзаращать тоже инетрфейс
Ivan
го это тебе не динамичный язык
Vasily
или кастовать из пустого инттерфейса
Kirill
https://play.golang.org/p/E7QO3Q5r25 даже учитывая сборку time go run json.go real 0m0.228s user 0m0.176s sys 0m0.064s размер ` du -h output.json 8,6M output.json ``
Vasily
Ещё хорошо бы теги структуры добавить. Я так понимаю у Александра они есть и в большмо оклчиестве
Vasily
Да, вышеописанный результат означает что мы сможем сделать 5 qps всего
Vasily
ну пусть 6 с учетом сборки
Vasily
на 1 ядре
Kirill
Ему всеравно https://github.com/golang/go/blob/master/src/encoding/json/encode.go#L401
Vasily
easyjson - это кодогенератор надо запустить его на нужные структуры чтобы он сгенерировал код запаковки-распаковки как либо он не работает
Vasily
прозразно не работает
Vasily
что значит потерял оригинальную структуру ?
Vasily
ничего не понял враппер возвращает структуру в пустом интерфейсе на него ( пустйо интерфейс ) потом json.Marshal, тот доковыривается до методов маршалинга который сгенерил easyjson можно, ксттаи, даже без стандартного обойисьб определить интерфейс у которого есть УфыноыщтЬфкырфд и если есть - вызывать методы
Aleksandr
в го строгая типизация: если раппер возвращает interface{}, то он его и возвращает.
Aleksandr
глазками смотрим
invariance
а interface это вроде универсальный тип?
Aleksandr
который явно возвращается методом
ceiling cat
а interface это вроде универсальный тип?
interface это универсально-приводимый в другие типы тип )
Kirill
а interface это вроде универсальный тип?
Нет, просто интерфейсу interface{} удволетворяет что угодно
aadz
вернулся, посмотрел тут и подумал: кто-то знает, почему reflect в Go такой тормозной? А JSON на reflect завязан
Евгений
а interface это вроде универсальный тип?
нет, это контейнер для любого типа )
Евгений
Что-то это мне напоминает притчу про изучение слона 3 человеками )
Anonymous
вернулся, посмотрел тут и подумал: кто-то знает, почему reflect в Go такой тормозной? А JSON на reflect завязан
Есть всякие кодегенераторы, которые делают на определённые структуры простые фции маршала/анмаршалла.
Anonymous
Easyjson например
aadz
да... и, вроде, все равно все это тормозит
Anonymous
Та не
aadz
ну, а как Unmarshal в структуру без reflect сделаешь? А reflect - медленный :(
aadz
а!..
aadz
Вот JavaScript что-то так не тормозит с JSON и генераций никаких не делает. Может просто что-то не так с Go?
Евгений
если всегда приходит один и тот же JSON, то, пожалуй, да
Евгений
Кто в курсе как можно настроить #Goland (тегну еще старое название #Gogland) чтобы она прогоняла #test с #coverage для проекта целиком - основой папки и пакаджей ниже. режим Package умеет тестировать и каверить только 1 пакадж режим Directory умеет гонять тесты по всем пакетам, но не умеет подгружать данные покрытия. Может надо как-то особый ключик или режим включить?
aadz
так - это как? цифрами пруфани
не могу. просто такое ощущение
Aleksandr
не могу. просто такое ощущение
очевидно неверное в разы, если не в десятки раз
aadz
и я знаю, почему. JS - не строго типизированный
aadz
но что-то не так все равно
Aleksandr
но что-то не так все равно
да, и это твое ощущение от скорости анмаршаллинга
aadz
вероятно
aadz
просто, за все надо платить в конечном итоге :(
aadz
говорят, что когда изобретут квантовый конпутер окончательно, и там один квант может представлять бесконечное количество бит, то Go на таком конпутере работать не будет :(
Евгений
Это пока типизированые биты не завезут )
aadz
кванты. биты и так уже типизированные
aadz
интересней другое, где они будут брать программистов на эти конпутеры? у нас парне на Go пишут также, как индусы по рождению пишущие на PHP с рождения и в школе не учившиеся. А там хотя бы теории вероятностей надо знать недецке, и железо у квантовых конпутеров - явно неземное
aadz
квантовый жесткий диск - это явно из фантастики! А кто коды контроллеру этого диска писать будет? наши простые парни, которые документацию про Go прочесть бояься? :)
aadz
это да... Во всем дложно быть какое-то свое равновесие, даже в квантовом программировании. Только не стоит достигать его раньше времени :)
aadz
slice
Kirill
Учитывая что вы его явно указали - это []interface{}
aadz
слайс некрофилии, думаю
Kirill
не надо гадать, нужно доку прочесть
Kirill
если есть сомнения есть fmt.Printf("%T", v)
aadz
блеять, а ведь сколько раз уже всем говорили, что reflect - это пакет для разработчиков такого же уровня, что и разработчики Go, и что нечего в него лезть! нет, лезут :(
aadz
ты не того уровня просто
aadz
просто напиши по-другому, без reflect
Nikita
блеять, а ведь сколько раз уже всем говорили, что reflect - это пакет для разработчиков такого же уровня, что и разработчики Go, и что нечего в него лезть! нет, лезут :(
О, аж приятно стало, а то я столько собак съел на рефлексии, столько раз себе пердак сжигал от сайд-эффектов, но теперь знаю его вдоль и поперек)
aadz
О, аж приятно стало, а то я столько собак съел на рефлексии, столько раз себе пердак сжигал от сайд-эффектов, но теперь знаю его вдоль и поперек)
ну и умничка! Хоть ты-то понимаешь, что не стоило туда и лезть на самом деле. Все можно решить по-другому
Pawel
А зачем так себя мучать было?
Pawel
Бенч покажи
Aleksandr
цифры давай) выигрыш не видят, а измеряют
Aleksandr
смешно
Aleksandr
есть понимание, что json парсится за доли миллисекунд, которые хром даже не показывает?
Aleksandr
ты возьми тестовый json прогони сотню тысяч раз, да померь. а еще можешь освоить встроенные пакет бенча