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

Функция flag.Usage

Функция flag.Usage представляет собой переменную типа func(), которая вызывается при выводе справки по флагам командной строки. По умолчанию она выводит список всех зарегистрированных флагов с их описаниями и значениями по умолчанию. Переопределяя flag.Usage, вы можете полностью контролировать формат и содержание сообщения справки, которое будет показано пользователю.

Синтаксис

flag.Usage = func() { // пользовательский вывод справки }

Пример

Давайте переопределим стандартную справку для программы, принимающей флаги -name и -age:

package main import ( "flag" "fmt" "os" ) func main() { var name string var age int flag.StringVar(&name, "name", "", "user name") flag.IntVar(&age, "age", 0, "user age") flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [options]\n", os.Args[0]) fmt.Fprintf(os.Stderr, "Options:\n") fmt.Fprintf(os.Stderr, " -name string\n") fmt.Fprintf(os.Stderr, " user name\n") fmt.Fprintf(os.Stderr, " -age int\n") fmt.Fprintf(os.Stderr, " user age\n") } flag.Parse() if name == "" { fmt.Println("Name not provided") } else { fmt.Printf("Name: %s\n", name) } if age == 0 { fmt.Println("Age not provided") } else { fmt.Printf("Age: %d\n", age) } }

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

"Usage: ./program [options]" "Options:" " -name string" " user name" " -age int" " user age"

Пример

Создадим более сложную справку с группировкой флагов и примерами использования:

package main import ( "flag" "fmt" "os" ) func main() { var host string var port int var verbose bool flag.StringVar(&host, "host", "localhost", "server host") flag.IntVar(&port, "port", 8080, "server port") flag.BoolVar(&verbose, "v", false, "verbose output") flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [options]\n", os.Args[0]) fmt.Fprintf(os.Stderr, "\nNetwork options:\n") fmt.Fprintf(os.Stderr, " -host string\n") fmt.Fprintf(os.Stderr, " server host (default \"localhost\")\n") fmt.Fprintf(os.Stderr, " -port int\n") fmt.Fprintf(os.Stderr, " server port (default 8080)\n") fmt.Fprintf(os.Stderr, "\nBehavior options:\n") fmt.Fprintf(os.Stderr, " -v\n") fmt.Fprintf(os.Stderr, " enable verbose logging\n") fmt.Fprintf(os.Stderr, "\nExamples:\n") fmt.Fprintf(os.Stderr, " %s -host 0.0.0.0 -port 9090\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s -host 127.0.0.1 -v\n", os.Args[0]) } flag.Parse() fmt.Printf("Host: %s\n", host) fmt.Printf("Port: %d\n", port) fmt.Printf("Verbose: %t\n", verbose) }

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

"Usage: ./program [options]" "" "Network options:" " -host string" " server host (default \"localhost\")" " -port int" " server port (default 8080)" "" "Behavior options:" " -v" " enable verbose logging" "" "Examples:" " ./program -host 0.0.0.0 -port 9090" " ./program -host 127.0.0.1 -v"

Пример

Используем стандартную функцию flag.PrintDefaults вместе с кастомным выводом:

package main import ( "flag" "fmt" "os" ) func main() { var dir string var timeout int flag.StringVar(&dir, "dir", ".", "working directory") flag.IntVar(&timeout, "timeout", 30, "timeout in seconds") flag.Usage = func() { fmt.Fprintf(os.Stderr, "Custom help for %s:\n", os.Args[0]) fmt.Fprintf(os.Stderr, "\nAvailable flags:\n") flag.PrintDefaults() fmt.Fprintf(os.Stderr, "\nFor more help, run: %s -help\n", os.Args[0]) } flag.Parse() fmt.Printf("Directory: %s\n", dir) fmt.Printf("Timeout: %d\n", timeout) }

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

"Custom help for ./program:" "" "Available flags:" " -dir string" " working directory (default \".\")" " -timeout int" " timeout in seconds (default 30)" "" "For more help, run: ./program -help"

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

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