РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1405 of 1593 menu

Переменная flag.ErrHelp

Переменная flag.ErrHelp - это предопределенная ошибка, которая возвращается парсером флагов в тех случаях, когда пользователь передает программе флаг -h или -help. Эта ошибка позволяет разработчикам обрабатывать запрос справки программно, а не полагаться на автоматический вывод, который выполняет функция flag.Parse. Первый параметр - это флаг, который мы проверяем, второй параметр - это значение ошибки, которую мы сравниваем с flag.ErrHelp.

Синтаксис

flag.ErrHelp

Пример

Давайте рассмотрим пример программы, которая проверяет, был ли запрошен вывод справки:

package main import ( "flag" "fmt" ) func main() { name := flag.String("name", "World", "name to greet") flag.Parse() if flag.Parsed() { fmt.Printf("Hello, %s!\n", *name) } }

При запуске программы с флагом -h или -help, функция flag.Parse вызовет автоматический вывод справки и завершит программу с кодом 2. Однако мы можем переопределить это поведение:

package main import ( "flag" "fmt" "os" ) func main() { flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [options]\n", os.Args[0]) fmt.Fprintf(os.Stderr, "Options:\n") flag.PrintDefaults() } err := flag.CommandLine.Parse(os.Args[1:]) if err == flag.ErrHelp { flag.Usage() os.Exit(0) } if err != nil { fmt.Fprintf(os.Stderr, "Error parsing flags: %v\n", err) os.Exit(1) } fmt.Println("Program started successfully") }

Результат выполнения программы с флагом -h:

"Usage: ./program [options]" "Options:" "-name string" " name to greet (default World)"

Пример

Рассмотрим более сложный пример, где мы используем flag.ErrHelp для создания кастомной обработки справки с дополнительной информацией:

package main import ( "flag" "fmt" "os" ) func main() { var port int var host string var verbose bool flag.IntVar(&port, "port", 8080, "server port") flag.StringVar(&host, "host", "localhost", "server host") flag.BoolVar(&verbose, "v", false, "verbose output") flag.Usage = func() { w := flag.CommandLine.Output() fmt.Fprintf(w, "Custom help for %s\n", os.Args[0]) fmt.Fprintf(w, "Example: %s -host=127.0.0.1 -port=9090 -v\n\n", os.Args[0]) fmt.Fprintf(w, "Flags:\n") flag.PrintDefaults() fmt.Fprintf(w, "\nEnvironment variables:\n") fmt.Fprintf(w, " PORT - overrides -port flag\n") fmt.Fprintf(w, " HOST - overrides -host flag\n") } err := flag.CommandLine.Parse(os.Args[1:]) if err == flag.ErrHelp { flag.Usage() os.Exit(0) } if err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } fmt.Printf("Server configuration: host=%s, port=%d, verbose=%v\n", host, port, verbose) }

Результат выполнения программы с флагом -help:

"Custom help for ./program" "Example: ./program -host=127.0.0.1 -port=9090 -v" "" "Flags:" "-host string" " server host (default localhost)" "-port int" " server port (default 8080)" "-v verbose output" "" "Environment variables:" " PORT - overrides -port flag" " HOST - overrides -host flag"

Смотрите также

  • переменную flag.CommandLine,
    которая представляет стандартный набор флагов
  • функцию flag.Parse,
    которая разбирает переданные аргументы командной строки
  • функцию flag.Parsed,
    которая проверяет, были ли разобраны флаги
  • переменную flag.Usage,
    которая определяет вывод справки по умолчанию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить