Size: a a a

2020 August 12

DP

Daniel Podolsky in Go-go!
Harry Fox
Ну есть такая задача в вакууме:

любые данные которые в нем лежат — пустой интерфейс.
(про протобаф слышал)
в ком - в нем?
источник

HF

Harry Fox in Go-go!
Harry Fox
Ну есть такая задача в вакууме:

любые данные которые в нем лежат — пустой интерфейс.
(про протобаф слышал)
Есть собственный протокол обмена данными.

любые данные которые в нем лежат — пустой интерфейс
источник

Д

Ди in Go-go!
Все хуже чем казалось на первый взгляд 😅
источник

J

Je in Go-go!
задачка не в вакууме совсем, и называется итератор, в Go именно так его и делают
пример, как это в stripe сделано https://github.com/stripe/stripe-go/blob/9272de620e580a02464071cdfd08cafa8050176e/iter.go#L21
источник

DP

Daniel Podolsky in Go-go!
“данные лежат в протоколе” О_о

коллега, так вы понимания не найдете
источник

HF

Harry Fox in Go-go!
Daniel Podolsky
“данные лежат в протоколе” О_о

коллега, так вы понимания не найдете
-_- в массиве байт, который был получен при сериализации выполненной в соответствии с этим протоколом
источник

E

Edgar in Go-go!
Так тогда в протоколе же массив байт, верно?
источник

DP

Daniel Podolsky in Go-go!
Je
задачка не в вакууме совсем, и называется итератор, в Go именно так его и делают
пример, как это в stripe сделано https://github.com/stripe/stripe-go/blob/9272de620e580a02464071cdfd08cafa8050176e/iter.go#L21
страйп - известные говнюки. но это не повод свой проект делать так же
источник

DP

Daniel Podolsky in Go-go!
Harry Fox
-_- в массиве байт, который был получен при сериализации выполненной в соответствии с этим протоколом
тогда у вас есть десериализатор из этого протокола, и дальше - конкретные типы. набор конкретных типов обычно лимитирован, на 5К точно не потянет
источник

E

Edgar in Go-go!
Вы там ведь понимаете, что те 5к строк кода, можно было бы использовать иначе? Вместо порождения некого слоя, который занимается приведением типа, вы могли бы к примеру, для каждого типа реализовать свой десериализатор

а) Это бы дало даже меньше кода
б) Это тупо ЯВНО
источник

DP

Daniel Podolsky in Go-go!
я вот на собесах задаю вопрос “какие средства обобщенного программирования есть в go?”, и жду развернутый ответ “есть интерфейсы, но они херовое средство обобщенного программирования, поэтому обобщенного программирования мы избегаем”

обобщенный итератор в go можно сделать на новомодных генериках, а если их не использовать - надо делать конкретные под каждый тип
источник

DP

Daniel Podolsky in Go-go!
но, кстати, @zergsLaw, этот файл на 5К строк - отличный для вашей статьи примерчик. в район хрупкости.
источник

E

Edgar in Go-go!
Je
задачка не в вакууме совсем, и называется итератор, в Go именно так его и делают
пример, как это в stripe сделано https://github.com/stripe/stripe-go/blob/9272de620e580a02464071cdfd08cafa8050176e/iter.go#L21
Badger сделал потрясающий итератор, конкретная структура (для их целей) и в нем есть поле value, который просто содержит []byte

И вот, гребанный итератор готов!
источник

HF

Harry Fox in Go-go!
в общем вы конечно ругаете такой подход, но хочу сказать пару слов в его защиту.

В проекте написан некая обертка над БД, которая реализует довольно понятный интерфейс. И бэкенду просто не нужно знать о типах, которые приходят к нему из базы. Он их отдает как есть.

Но иногда, очень редко, нужно таки к этим данным из БД обращаться. Но типы для них никто не пишет. Отсюда и получается такой подход.

Может это неправильно, но зато благодаря такому подходу фронтендеры левой пяткой набивают эндпоинты на бэке
источник

E

Edgar in Go-go!
Да у меня никак не получается этот блок нормально написать 🙁

Статья начинает переростать все адекватные пределы, поэтому удалил и снова пытаюсь заново написать
источник

ВС

Владимир Столяров... in Go-go!
Harry Fox
в общем вы конечно ругаете такой подход, но хочу сказать пару слов в его защиту.

В проекте написан некая обертка над БД, которая реализует довольно понятный интерфейс. И бэкенду просто не нужно знать о типах, которые приходят к нему из базы. Он их отдает как есть.

Но иногда, очень редко, нужно таки к этим данным из БД обращаться. Но типы для них никто не пишет. Отсюда и получается такой подход.

Может это неправильно, но зато благодаря такому подходу фронтендеры левой пяткой набивают эндпоинты на бэке
Прямой путь в ад
источник

DP

Daniel Podolsky in Go-go!
Harry Fox
в общем вы конечно ругаете такой подход, но хочу сказать пару слов в его защиту.

В проекте написан некая обертка над БД, которая реализует довольно понятный интерфейс. И бэкенду просто не нужно знать о типах, которые приходят к нему из базы. Он их отдает как есть.

Но иногда, очень редко, нужно таки к этим данным из БД обращаться. Но типы для них никто не пишет. Отсюда и получается такой подход.

Может это неправильно, но зато благодаря такому подходу фронтендеры левой пяткой набивают эндпоинты на бэке
> благодаря такому подходу фронтендеры левой пяткой набивают эндпоинты на бэке

вас ждет незабываемое!
источник

J

Je in Go-go!
Edgar
Badger сделал потрясающий итератор, конкретная структура (для их целей) и в нем есть поле value, который просто содержит []byte

И вот, гребанный итератор готов!
так []byte не сильно от interface{} отличается, его тоже нужно уметь сериализовать)
источник

ЕО

Евгений Омельченко... in Go-go!
Harry Fox
в общем вы конечно ругаете такой подход, но хочу сказать пару слов в его защиту.

В проекте написан некая обертка над БД, которая реализует довольно понятный интерфейс. И бэкенду просто не нужно знать о типах, которые приходят к нему из базы. Он их отдает как есть.

Но иногда, очень редко, нужно таки к этим данным из БД обращаться. Но типы для них никто не пишет. Отсюда и получается такой подход.

Может это неправильно, но зато благодаря такому подходу фронтендеры левой пяткой набивают эндпоинты на бэке
Это называется "сначала сдизайнили не подумав, так чтобы побыстрее написать, а потом вставили костылей"
источник

E

Edgar in Go-go!
Harry Fox
в общем вы конечно ругаете такой подход, но хочу сказать пару слов в его защиту.

В проекте написан некая обертка над БД, которая реализует довольно понятный интерфейс. И бэкенду просто не нужно знать о типах, которые приходят к нему из базы. Он их отдает как есть.

Но иногда, очень редко, нужно таки к этим данным из БД обращаться. Но типы для них никто не пишет. Отсюда и получается такой подход.

Может это неправильно, но зато благодаря такому подходу фронтендеры левой пяткой набивают эндпоинты на бэке
А вот это то, что в моей статье и написано! Такой подход лишь увеличит стоимость поддержки проекта в дальнейшем, что лишь начнет пожирать время разработчиков
источник