Pull to refresh

Comments 12

Args: os.Args[1:]
Что произойдет, если параметров при вызове не будет?

Будет слайс нулевой длины.

несколько лет назад, когда я работал в MailRu.
отчего ж ушли?
В целом довольно правильный подход, сам почти так же делаю :)
Но пока не придумал что делать с флагами, которые объявлены в модулях но не используются в тех бинарниках, которым из модуля нужна только часть функциональности. А --help засоряется. Более гранулярно нарезать модули конечно правильный ответ, но на это тратится много времени.

Спасибо.
А как они появляются в бинарниках, если не используются? :) Или они объявляются где-то в третьем пакете? Можно написать кастомный PrintDefaults(), который будет принимать фильтр флага в виде префикса, например, или списка имен флагов.

Ну как появляются, если в модуле от которого зависит бинарник есть пара функций, одна использует объявленный там же флаг а другая — нет, и бинарнику нужна только последняя, то флаг всё равно добавится в список флагов бинарника. И фильтр по именам конечно поможет, но выглядит кривоватым хаком.

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

Да, дизайн и правда кривой, есть идеи как это легко починить?

Ну, основная идея описана в статье. Плавно на нее перейти можно, например, если уйти от flag.CommandLine (глобальный FlagSet) к FlagSet, объявленному внутри main.

Есть ли возможность фильтровать вывод -help на основании введенных аргументов?


К примеру, у вас есть утилита, которая работает с двумя провайдерами — yoogle и gandex, и у них разные способы авторизации, допустим.


Поэтому для того чтобы использовать утилиту с yoogle нужно ввести cmd -provider=yoogle -yoogle.param1=123 -yoogle.param2=abc, а с gandexcmd -provider=gandex -gandex.param3=xyz -gandex.param4=654.


Вполне разумно было бы в таком случае при запуске cmd -help выдавать только справку для параметра -provider, а при запуске cmd -help -provider=[gandex|yoogle] показывать справку по параметрам соответствующего провайдера.

Звучит полезно, но такого в flagutil нет. И, наверное, не будет. Проще сделать cmd -help | fgrep yoogle.

Sign up to leave a comment.

Articles