Wingman
А зачем вам тогда нужен протобуф? Хотя конечно и на нем можно, но в принципе как и описали.
Мне нужно строгое описание протокола, но в то же время нужна возможность отправлять разные типы пакетов (структур)
Wingman
Ну и определять, что было отправлено, на принимающей стороне
Zver
Мне нужно строгое описание протокола, но в то же время нужна возможность отправлять разные типы пакетов (структур)
Ну и указываете в заголовке или отделанным параметром тип сообщения и размер. Тот же gob примерно так работает.
Wingman
Ну и указываете в заголовке или отделанным параметром тип сообщения и размер. Тот же gob примерно так работает.
так чтобы этот отдельный параметр прочитать - нужно сначала анмаршалить, а во что - заранее неизвестно
Pavel
Сделай тип «тип пакета».
Pavel
Потом switch case по типам и анмаршал делаешь правильный
Wingman
А оно разве нормально анмаршалится, если там будут куча "лишних" полей?
Pavel
Сделай его фикс два байта перед сообщением например
Pavel
😆
Wingman
гм
Wingman
похоже, мне надо курить тип Any
Wingman
и пихать в него "настоящий" пакет
Zver
похоже, мне надо курить тип Any
Зачем тебе any? Если в текстовом виде отправлять, то и размеры никакие не нужны. Указываешь имя (код, тип) пакета и вызываешь нужный обработчик, который анмаршалит.
Мерль
О, шедевр — Влияет ли на управление сложностью то, что в программировании сейчас довольно много людей со слабой технической базой? Конечно. Для таких людей даже специальный язык программирования придумали. Называется Go. Я не шучу. Действительно, целью создания языка Go была попытка вовлечения в написание кода студентов и стажеров Google, которые не могут освоить C++. Python им не подходил по производительности, нужно было что-то иное, и в Google придумали Go. Как оказалось, очень много людей готовы на нем писать, потому что он очень простой. Но какой ценой достигнута эта простота? Нам дают не нормальный язык программирования, а его очень урезанную версию — в нем нет практически никаких сложных концептов by design. Нет дженериков, нет такого понятия, как исключения и т.д. И поклонников такого подхода много. Отсюда https://habr.com/company/oleg-bunin/blog/424393/
Так и есть, и я не понимаю почему это воспринимается как троллинг. Большая часть плюсов Go связана с его тщательно продуманной простотой
snip
Так и есть, и я не понимаю почему это воспринимается как троллинг. Большая часть плюсов Go связана с его тщательно продуманной простотой
Ну вот не так. Да, один из главных плюсов го это простота, добиться которой не так легко, но изначальный посыл в том тексте неверный, и быстрорастущая популярность го это не результат того что большое кол-во неучей готовы писать на го
snip
Во первых я не выбирал. Во вторых, когда я начинал писать на го, всяких рустов с хаскелями я ещё не знал.
Удивляет нытье людей утверждающих, что вокруг все просто неучи и при этом сами они даже не выбирают стек технологий, какой то инфантилизм
Anonymous
Ну вот не так. Да, один из главных плюсов го это простота, добиться которой не так легко, но изначальный посыл в том тексте неверный, и быстрорастущая популярность го это не результат того что большое кол-во неучей готовы писать на го
Ты конечно извини, но простота это миф. Я сейчас смотрю исходники одного проекта на гоу и там такая лапша, что ой ой ой. Я неделю убил чтобы разобраться с функционалом более менее
Anonymous
И самое печальное, что это не первый такой проект
snip
Ты конечно извини, но простота это миф. Я сейчас смотрю исходники одного проекта на гоу и там такая лапша, что ой ой ой. Я неделю убил чтобы разобраться с функционалом более менее
Да, на го можно говнокодить, но простота заключается в том, что весьма сложные концепции спрятаны за простыми в использовании подходами
Anonymous
И я бы не сказал, что люди используют простые подходы
Anonymous
Это конечно все относительно
Wingman
Во-первых, посмотри в сторону grpc https://grpc.io/docs/tutorials/basic/go.html
Не совсем то: мне нужно стримить всякие изменения, т.е. не p2p, а p2mp
YᑌᖇIY
Холивар какой то...
Мерль
Ну вот не так. Да, один из главных плюсов го это простота, добиться которой не так легко, но изначальный посыл в том тексте неверный, и быстрорастущая популярность го это не результат того что большое кол-во неучей готовы писать на го
Ну в общем-то отчасти как раз из-за того, что Go простой и позволяет писать более менее надёжный код даже говнокодерам, он так прёт в популярности. Ну, помимо всяких плюшек рантайма, простоты поддержки и пиара от гугла. И в этом нет ничего плохого — раньше говнокодеры шлёпали CRUD на ноде и пыхе, сейчас начинают шлёпать более надёжные на Go. А тесты как они не писали, так и не пишут. А те программисты, которые Программисты, почти всегда найдут себе интересную и оплачиваемую работу хоть на Go, хоть на Rust, хоть на Scala, хоть на Java
Anonymous
Не совсем то: мне нужно стримить всякие изменения, т.е. не p2p, а p2mp
Возьми тогда какую нибудь очередь с топиком
Wingman
Возьми тогда какую нибудь очередь с топиком
Уже взял Но я не хочу на каждый тип пакета плодить топик, в этом и суть)
Wingman
А почему нет?
Дико громоздко и нелогично
YᑌᖇIY
А посмотреть внутренности unmarshal не пробовали? Есть ли там вообще нужные концы для вашей проблемы? Гугл тоже...только на англ надо найти правильную формулировку проблемы.
Anonymous
Пошел гуглить)
Но я не уверен что там так можно, можно на протобафе сделать говно структуру конечно
snip
Ну в общем-то отчасти как раз из-за того, что Go простой и позволяет писать более менее надёжный код даже говнокодерам, он так прёт в популярности. Ну, помимо всяких плюшек рантайма, простоты поддержки и пиара от гугла. И в этом нет ничего плохого — раньше говнокодеры шлёпали CRUD на ноде и пыхе, сейчас начинают шлёпать более надёжные на Go. А тесты как они не писали, так и не пишут. А те программисты, которые Программисты, почти всегда найдут себе интересную и оплачиваемую работу хоть на Go, хоть на Rust, хоть на Scala, хоть на Java
Да, только говнокодеры могут говнокодить на го потому что тимлиды оценили преимущества го, но не наоборот И да, простота, пиар и прочее это несомненно сыграло роль Только го не задумывался как язык для тех кто не может освоить с++ а как язык на котором могут начать писать вчерашние студенты не тратя годы на освоение сложного инструмента
Anonymous
Пошел гуглить)
А, там нет наследования. Композицию над будет юзать
Wingman
Но я не уверен что там так можно, можно на протобафе сделать говно структуру конечно
Пока что мне пришло в голову - делать "родительскую" структуру-обертку, объявлять в ней тип пакета, и поле с типом Any - в которое уже писать "основной" пакет 1) читать тип 2) после считывания типа - приводить Any к нужному типу
Wingman
До компа доберусь - буду экспериментировать
Мерль
https://developers.google.com/protocol-buffers/docs/techniques
.
Стандартный гошный пакет database/sql пытается повторить запрос при ошибке БД?
Wingman
С чего бы
.
А почему нет
.
Cluttering the code with error-handling and retry. Letdatabase/sql handle connection pooling, reconnecting, and retry logic for you https://www.vividcortex.com/blog/2015/09/22/common-pitfalls-go/
Wingman
Какой смысл повторять запрос с синтаксической ошибкой например?
.
Само собой твой запрос повторять нет смысла, но ведь можно понять, по какой причине отклонен
Wingman
Можно конечно
.
What if your connection to the database is dropped, killed, or has an error? You don’t need to implement any logic to retry failed statements when this happens. As part of the connection pooling in database/sql, handling failed connections is built-in. If you execute a query or other statement and the underlying connection has a failure, Go will reopen a new connection (or just get another from the connection pool) and retry, up to 10 times. http://go-database-sql.org/errors.html
Wingman
If err = db.xxx(); err != nil { .... :)
.
Таки повторяет
Wingman
При дисконекте да
Anonymous
А если это была транзакция?
Anonymous
На дисконнекте она откатится и явно повторять уже будет не нужно)
.
Я думаю с транзакцией также
.
сначала попытается повторить, потом вернет с ошибкой
Anonymous
Транзакция к конекшену привязана
Anonymous
Нельзя будет что-то повторить
Subbotin
Господь мой. На js
Subbotin
Не взлетит
.
Вполне возможно что он повторяет целую транзакциию 🤔
Anonymous
Точно нет
саша
Господь мой. На js
а где там что-то о js сказано?
Subbotin
https://github.com/solid
саша
Нашёл уже..
Anonymous
Сервер на ноде, они обречены)))
Bohdan
у них какой-то неправильный solid
Maksim
у них какой-то неправильный solid
Solid's basic protocol is REST сразу такая грусть разбирает :( чёртовы маркетологи)
Bohdan
Solid's basic protocol is REST сразу такая грусть разбирает :( чёртовы маркетологи)
мне кажется, Тима Бернерса-Ли держат в заложниках
Daniel
Можно
Мерль
У тебя в JSON массив track — это поле объекта recenttracks, а ты сделал структуру, где tracks одного уровня с recenttracks то есть надо так type lastfmResponse { Recenttracks struct { Track []track `json:"track"` } `json:"recenttracks"` } Вот валидный код https://play.golang.org/p/jH_GJIHbChV Советую пользоваться генераторами типа https://mholt.github.io/json-to-go/