Dmitry
запилю пожалуй пакет для парсинга позиционных параметров онли
Dmitry
чувствую взлетит
heavycharged
а в go есть оптимизация хвостовой рекурсии?
heavycharged
а, кажется есть
Илья
Нет
Kirill
а, кажется есть
https://github.com/golang/go/issues/15304
heavycharged
я сначала на эту статью наткнулся
heavycharged
https://medium.com/@felipedutratine/iterative-vs-recursive-vs-tail-recursive-in-golang-c196ca5fd489
heavycharged
там товарищ утверждал что есть
Maksim (Ellrion)
Ибо иногда хочется servicename stats -h -a
subCmd := flag.Args()[0] args := flag.NewFlagSet... args.Parse(flag.Args()[1:])
Maksim (Ellrion)
Ужас
Аргументированно)
Dmitry
Аргументированно)
Попробуй два разных набора флагов для двух разных субкоманд
Maksim (Ellrion)
Попробуй два разных набора флагов для двух разных субкоманд
Изи. Взял подкоманду по мапе или кейсу выбрал функцию запускающую ее. Там и создание флагсета
Dmitry
Изи. Взял подкоманду по мапе или кейсу выбрал функцию запускающую ее. Там и создание флагсета
Окей, завелосипедить можно все. Зачем тебе flags фообще, сделал мапу и функции
Maksim (Ellrion)
Окей, завелосипедить можно все. Зачем тебе flags фообще, сделал мапу и функции
Причем тут велосипед? Это стандартная либа. Пара ее простых функций. Они же выполняются и в пакете под капотом, только для дефолтно созданного флагсета. Ляпнул свой "ужас" в пустоту а аргументов 0
Maksim (Ellrion)
Что я тут переизобрел? Я использовал просто методы стандартной библиотеки. Но видимо я должен был вместо этого тянуть чей то левый пакет. Ага)
Kirill
subCmd := flag.Args()[0] args := flag.NewFlagSet... args.Parse(flag.Args()[1:])
Ну его в баню. Строить полутораколесные велосипеды с треугольными неравносторонними колёсами из костылей - ну его
Dmitry
Maksim (Ellrion)
Окей напиши usage для твоего случая. А теперь посмотри сколько строчек Тебе понадобилось на все
Он автосгенерится так же как и при наборе флагов без подкоманды
Maksim (Ellrion)
Для каждой подкоманды будет стандартный -h
Maksim (Ellrion)
Ладно я вам доказывать ничего особо не хочу. В го есть стандартные средства я их хотел показать и помочь с быстрым решением без монстров типа кобры. только и всего.
Dmitry
А общий хелп по всем сабкомандам и флагами?
Pawel
Кто нибудь задавался вопросом - как повесить json-rpc server на вебсокет горилки? Вот умный мужик предлагет https://github.com/powerman/rpc-codec/issues/16#issuecomment-287952309 Интересует практический аспект - насколько этот код prod ready или там есть не очевидные грабли/косяки?
Pawel
как то сложно там всё. Вот думаю - а не лучше ли забить не вебсокеты и сделать по старинке на хттп?
Dmitry
я его юзал для первых пет проджектов
а https://github.com/alexflint/go-arg использовал? звездочки зашкаливают, на вид простой как две копейки. для простых скриптиков мне кажется самое то
Илья
Я давно не делал сложных cli, для простого flags хватает за глаза
Slava
у меня есть небольшой враппер который генерит флаги для стандартного flags на основе структур
Slava
https://github.com/octago/sflags
Мерль
https://github.com/octago/sflags
Какая интересная штука, я как раз подумывал начать писать свой велосипед для этого
Alexander
https://github.com/octago/sflags
Полезно, спасибо! 👍
Kirill
https://github.com/octago/sflags
напоминай об этом народу чаще)
🏁Александр
чо тут?
Dmitry
https://github.com/octago/sflags
извини, я тупой и не пойму зачем этот пакет нужен. для поддержки структур как определения аргументов для любой библиотеки что не поддерживает структуры ? а зачем если можно взять библиотеку что поддерживает структуры ?
Daniel
это кодогенератор
Daniel
у вас есть структура конфига, и вы нарисовали ей тегов
Daniel
можете позвать этот кодогенератор, он наделает инициализации для flags (можно и для других парсеров)
Daniel
это всего-навсего чтобы не писать к своей структуре flag-инициализацию руками (и не править ее при изменении структуры)
Dmitry
это кодогенератор
кодогенератор? насколько я вижу это враппер.
Dmitry
с одной стороны интересно, с другой лишний слой абстракции
Daniel
э, нет
Daniel
тут нет никакой абстракции вообще
Daniel
тут только собраны в одно место вещи, которые обычно в разных лежат
Dmitry
тут только собраны в одно место вещи, которые обычно в разных лежат
я пытаююсь все таки понять чем это лучше чем скажем https://github.com/jessevdk/go-flags ?
Dmitry
в чем профит брать sflags + стандартный flag , а не сразу брать другую либу уже понимающую структуры ?
Daniel
если прям вот нуны преймущества - "это" поддерживает больше одного парсера аргументов
Daniel
коллега, я лучше пойду позавтракаю
Dmitry
да пожалуйста
Dmitry
если прям вот нуны преймущества - "это" поддерживает больше одного парсера аргументов
окей, я вижу что это может считаться преимуществом если в процессе разработки обнаружится что текущий парсер не поддерживает хотелки. Хотя возникает вопрос - а sflags то будет поддерживать эти хотелки ?
Dmitry
просто возможность смены парсера без определенной цели в процессе разработки.. ну это по меньшей мере нелогично
Michael
кто-то Qt под Android собирал?)
Michael
с обвязкой для Go
Dmitry
да я вижу полезность если это действительно кодогенератор, тоесть сгенеренный код может использоваться и без sflags , но нет же.. sflags враппер, и приложения должны запускать его каждый раз
Kirill
Что ты пытаешься сделать?
Michael
по ряду причин интересна связка Quick Controls 2 + Go, разметка на Qml, а под капотом Go
Slava
извини, я тупой и не пойму зачем этот пакет нужен. для поддержки структур как определения аргументов для любой библиотеки что не поддерживает структуры ? а зачем если можно взять библиотеку что поддерживает структуры ?
Например у нас уже используется flags стандартный для разных библиотек внутренних. А для своего бинарника я хочу через структуры описать флаги и мне нельзя брать левый парсер
Dmitry
Например у нас уже используется flags стандартный для разных библиотек внутренних. А для своего бинарника я хочу через структуры описать флаги и мне нельзя брать левый парсер
окей я понял. только еще два вопроса : доступ к флагам из внутренних библиотек - звучит как убогая архитектура, не ? и второй, а sflags не левый парсер ?
Slava
Почему убогая?
Fastumkruk
InlineQuery это результаты ленты поиска, CallbackQuery это события кнопок
Отвечаю по update.CallBackQuery.id , все равно ответ кнопки не приходит.
Dmitry
как результат этой связаности ты не можешь свободно заменить парсер аргументов, не ?
Slava
а зачем мне менять парсер аргументов, если я пользуюсь всей инфраструктурой внутренней и библиотеками?
Dmitry
а зачем мне менять парсер аргументов, если я пользуюсь всей инфраструктурой внутренней и библиотеками?
ну вижу что мне не убедить вас что сильная связанность это плохо. окей, каждый имеет право на свое мнение
Dmitry
ну и sflags не парсит command line, а только генерирует набор флагов по структуре, парсит уже сам flag
но он левый пакет точно также как и другой левый пакет. кто гарантирует что он генерит правильный набор флагов ?
Slava
сам пакет и гарантирует, но клиент тоже может проверять, конечно
Dmitry
сам пакет и гарантирует, но клиент тоже может проверять, конечно
я просто пытаюсь понять чем этот пакет sflags лучше любого другого левого пакета , который также предоставляет гарантии посредством тестов ?
Slava
ну вижу что мне не убедить вас что сильная связанность это плохо. окей, каждый имеет право на свое мнение
есть теория, а есть практика. К примеру, в теории важно нормализировать базу, а на практике для оптимизации её денормализируют
Daniel
коллега
Dmitry
почему другой пакет это левый, а вот sflags - родной и правильный?
Daniel
мы все ответы, какие были у нас, вам выдали
Roman
https://flaviocopes.com/golang-does-not-support-indexing/ может кому будте полезно, угробил минут 15 на разбор почему после переписания на указателях перестало работать