Флаги и постоянные флаги
Флаги string, int и bool, а также интеграция с Viper
«Флаги и постоянные флаги» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Локальные флаги
Локальные флаги применяются только к команде, в которой они определены. Используйте cmd.Flags():
var port int
serveCmd.Flags().IntVar(&port, "port", 8080, "HTTP server port")Постоянные флаги
Постоянные флаги наследуются командой и всеми её подкомандами. Используйте cmd.PersistentFlags():
var verbose bool
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Enable verbose output")Краткие флаги
Используйте варианты *VarP, чтобы добавить однобуквенное сокращение:
cmd.Flags().StringVarP(&output, "output", "o", "stdout", "Output destination")Типы флагов
Cobra через pflag поддерживает String, Bool, Int, Int64, Float64, StringSlice, Duration, Count и другие типы. Для каждого типа есть вариант Var, принимающий указатель, и удобный вариант, возвращающий указатель.
Обязательные флаги
Пометьте флаг как обязательный — Cobra выдаст ошибку, если он не указан:
cmd.MarkFlagRequired("config")Группы флагов
Пометьте флаги как взаимоисключающие или обязательные вместе с помощью MarkFlagsRequiredTogether и MarkFlagsMutuallyExclusive:
cmd.MarkFlagsRequiredTogether("user", "password")
cmd.MarkFlagsMutuallyExclusive("json", "yaml")Флаг StringSlice
Принимайте несколько значений в виде списка, разделённого запятыми, или повторяющихся флагов:
var tags []string
cmd.Flags().StringSliceVar(&tags, "tags", nil, "Tags (comma-separated)")
// Usage: --tags a,b,c or --tags a --tags bСвязывание флагов с Viper
Свяжите флаг cobra с ключом Viper, чтобы значение также могло поступать из переменной окружения или конфигурационного файла:
viper.BindPFlag("port", serveCmd.Flags().Lookup("port"))
viper.BindEnv("port", "APP_PORT")Отображение значения по умолчанию
Cobra автоматически показывает значение по умолчанию в тексте справки. Указывайте понятное значение по умолчанию, подходящее для распространённого случая сразу после установки.
Доступ к значениям флагов
Получайте значения флагов через связанный указатель или находите их по имени в наборе флагов команды, если указатель недоступен:
port, _ := cmd.Flags().GetInt("port")Метод Changed
cmd.Flags().Changed("flag-name") возвращает true, только если пользователь явно задал флаг. Используйте его, чтобы отличить случай «флаг не указан» от случая «флаг указан со значением по умолчанию».
Быстрая проверка
В чём разница между локальным и постоянным флагом в Cobra?
Повторение: флаги и постоянные флаги
Ключевые моменты:
- cmd.Flags(): локальные; cmd.PersistentFlags(): наследуются подкомандами
- *VarP для сокращений; MarkFlagRequired для обязательных флагов
- MarkFlagsRequiredTogether / MarkFlagsMutuallyExclusive для задания связей
- Changed() для определения того, задал ли пользователь флаг явно
Часто задаваемые вопросы
Урок «Флаги и постоянные флаги» бесплатный?
Да — полный текст урока «Флаги и постоянные флаги» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Флаги и постоянные флаги»?
Флаги string, int и bool, а также интеграция с Viper Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Флаги и постоянные флаги»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы Cobra
- Флаги и постоянные флаги
- Подкоманды и группы команд
- Распространение инструментов CLI