Kirill
получается довольно удобно
Kirill
но — это если я правильно задачу понял
Alexey
как @toby3d делал в клиенте TG bot api
Можно ссылочку на код? Я находил подобное решение в статьях (если мы об одном и том же). Но в таком случаи клиентский код все равно должен заморичитсья с созданием структуры с параметрами
Kirill
не, смотри, тип структуры предоставляешь ты сам
Kirill
а чтобы дать возможность не задавать опции вовсе — можно использовать rest arguments
Kirill
например: package a type SomeOpts struct {} // ... func DoSomeReq(options ...SomeOpts) SomeResult { opts := defaultOpts if len(options) > 0 { opts = options[0] } // ... }
Kirill
в итоге валидным будет и a.DoSomeReq(), и a.DoSomeReq(customOptions)
Kirill
а лишних аллокаций не будет
Daniel
тогда возьмите swagger и опишите api на нем
Daniel
надо будет описать опциональные параметры и дефолты к ним
Kirill
тогда возьмите swagger и опишите api на нем
описание апишки, вроде как, есть
Daniel
вот эти дефолты и приедут в ваш хендлер
Daniel
описание апишки, вроде как, есть
тогда достаточно кода нагенерить
Kirill
но может я задачу саму упускаю) Alexey ты пишешь клиент к апишке или реализовываешь сам сервак апишки?
Alexey
Клиент пишу
Kirill
тогда достаточно кода нагенерить
вот именно, достаточно негенерить код :D
Kirill
Клиент пишу
тогда уж лучше сделать удобный и адекватный клиент, I think
Kirill
я в gramework специально делаю апишку так, чтобы было легко её юзать — так что там много кода с rest args
Kirill
Нашёл, сейчас посмотрю, спасибо)
note: там не клиент апи, там фреймворк именно для всяких серверных вещей
Kirill
null, то есть, простите, nil - кривизна языка
ты не путай — с Optional ты получаешь в добавок к типичным null и true/false ещё и empty, в гошке у тебя nil будет только для ссылочных типов
Kirill
народ, кто звёздочку не поставил грэйму, исправляйте ситуацию https://github.com/gramework/gramework 😄
Maxim
например: package a type SomeOpts struct {} // ... func DoSomeReq(options ...SomeOpts) SomeResult { opts := defaultOpts if len(options) > 0 { opts = options[0] } // ... }
Без многоточия и с ссылкой, чтобы можно было вбить nil в аргумент и не париться. Главное чекать что на входе и по необходимости сбрасывать в дефолт
Maxim
Я решил так, что если опциональных аргументов больше трёх-четырёх, то все их пихать в отдельную структуру
Maxim
Обязательные аргументы всегда напрямую. Либо вообще всё пихать в структуру и чекать поля
Daniel
это решает проблему именованных аргументов, но не решает проблему дефолтных значений
Антон
Человеческий фактор никто не отменял
Зачем полагаться на такую несовершенную систему, как человек, если можно перепоручить заботу о проверке на компилятор?
Антон
Антон
И с дженериками, чтобы был один опциональный тип, а не по одному на каждый, который нагенерировал сам
Slava
А можно пример кода?
https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
Slava
тут разобраны разные варианты, в том числе и функциональный
Anonymous
гоферы мне напоминают персонажей из аниме показывающих невиданную стойкость и силу духа. их продолжают бить, они падают но всеравно продолжают бой
Anonymous
мне только непонятно почему бизнес спонсирует эту деятельность всю
Daniel
ну - какую-то деятельность он должен спонсировать
Kirill
и эта пока выгоднее остальных
Anonymous
хотя да, я слышал уже о том что можно нанять стадо джунов которые не поймут АДТ и дженерики, но как то очень слабо верится . мне кажется любой програмист за месяц вырастит из яслей и ему самому захочется больше сахара, тем более видит же что в соседнем огроде все ок... короче рвет мне хорошо это шаблон. извените за флуд, уж больно хорошо Антон вбросил...
Kirill
что он вырастит из яслей? О_о
Daniel
в каком именно огороде все ок?
Kirill
в каком именно огороде все ок?
всё больше кажется, что Станислав и Антон всё ещё в шоке от ADT и граблей не нахватались
🏳️ Phil
О. У нас давно не былл треда про историю исчезновения дженериков из go?
🏳️ Phil
Блин. Надо таки записать и на таймер поставить. Раз в квартал я думаю будет ок
Kirill
по крайней мере я не видел
Kirill
ссылку схороним и в людей кидаться можно будет
Anonymous
в каком именно огороде все ок?
о чем вы сейчас? о какой то технической невозможности сделать в языке АДТ и дженерики? шарп, свифт, раст, жава в конце концов. не уступают по скорости гошечке и имеют гораздо больше сахара. у них конечно другие интересы но я верю в свифт на бекенде и рост популярности шарпа, и f# в часности
🏳️ Phil
Короче, начинаю вброс для набежавших явистов и иже с ними. В 1992 году они там были.
Антон
всё больше кажется, что Станислав и Антон всё ещё в шоке от ADT и граблей не нахватались
Да-да, я понимаю, что осознать для вас возможность типов без nil сложно. Ничего, я подожду
Anonymous
О, и как только все крупные компании, использующие go до этого не догадались. Вам нужно срочно написать пост и открыть миру глаза
все гораздо хуже. крупные компании не догадались выкинуть тормозящие безтиповые скрипты типа питона и руби и конторы вроде инстаграма держат в секрете сколько рпс они выжимают с ядра, хотя понятно что чтото около пяти. хотя есть надежда на тайпскрипт и mypy
Slava
а mypy тут причём? =)
Kirill
Да-да, я понимаю, что осознать для вас возможность типов без nil сложно. Ничего, я подожду
я разные системы типов видел. больше скажу — я пробовал в go вкручивать adt. вы сколько лет назад начали заниматься коммерческой разработкой?
Anonymous
так то у питона строгая типизация имеется в наличии, но возможно вам это не известно
строгая типизация совсем не утешает, если она динамическая
Slava
толк наверное в том, что она есть, а вы говорите что её нет
Anonymous
это лишь ты было что сказать. не "отсутствие" а "утиность". не тупой а альтернативно одаренный
Daniel
скажите лучше, адепты дженериков - зачем они вам нужны?
Daniel
мне вот ни разу не понадобились
Daniel
а вам?
Wingman
чтобы ныть о чём-нибудь другом. А то о дженериках надоело
Anonymous
если вам не нужны откажитесь от них в списках
Daniel
в каких списках?
Anonymous
гошных списках. или вы не знали что они дженерик?
Daniel
я в курсе, что в go есть generic типы - map, например я не в курсе, зачем вам нужны генерики кроме тех, что уже есть
Daniel
и, @enomad , если ответа не будет - я вас побаню на сутки, ок?
Anonymous
этот вопрос должен ставить в тупик своей элементарностью я понял