0Pricing
Go Academy · Урок

Флаги и постоянные флаги

Флаги 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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы Cobra
  2. Флаги и постоянные флаги
  3. Подкоманды и группы команд
  4. Распространение инструментов CLI
← Назад к Go Academy