Функция flag.PrintDefaults

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

Синтаксис

goflag.PrintDefaults()

Пример

Давайте определим несколько флагов разных типов и выведем их значения по умолчанию:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  name := flag.String("name", "default", "user name")
  age := flag.Int("age", 0, "user age")
  active := flag.Bool("active", false, "is user active")

  flag.PrintDefaults()
}

Результат выполнения кода:

go-active
  is user active (default false)
-age int
  user age (default 0)
-name string
  user name (default "default")

Пример

Давайте выведем значения по умолчанию после парсинга флагов, чтобы показать, что информация не зависит от переданных аргументов:

gopackage main

import (
  "flag"
  "fmt"
  "os"
)

func main() {
  port := flag.Int("port", 8080, "server port")
  timeout := flag.Duration("timeout", 30, "timeout in seconds")
  verbose := flag.Bool("verbose", false, "enable verbose output")

  flag.Parse()

  fmt.Println("Parsed flags:")
  fmt.Printf("port: %d\n", *port)
  fmt.Printf("timeout: %v\n", *timeout)
  fmt.Printf("verbose: %t\n", *verbose)

  fmt.Println("\nDefault values:")
  flag.PrintDefaults()
}

При запуске с аргументами -port=9090 -verbose=true результат выполнения кода:

goParsed flags:
port: 9090
timeout: 30s
verbose: true

Default values:
-port int
  server port (default 8080)
-timeout duration
  timeout in seconds (default 30s)
-verbose
  enable verbose output (default false)

Пример

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

gopackage main

import (
  "flag"
  "fmt"
  "os"
)

func main() {
  host := flag.String("host", "localhost", "server hostname")
  port := flag.Int("port", 8080, "server port")
  debug := flag.Bool("debug", false, "enable debug mode")

  flag.Usage = func() {
    fmt.Println("Usage: program [options]")
    flag.PrintDefaults()
  }

  if len(os.Args) > 1 && os.Args[1] == "-h" {
    flag.Usage()
    return
  }

  flag.Parse()
  fmt.Printf("Running on %s:%d (debug: %t)\n", *host, *port, *debug)
}

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

goUsage: program [options]
-debug
  enable debug mode (default false)
-host string
  server hostname (default "localhost")
-port int
  server port (default 8080)

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

  • функцию flag.Parse,
    которая выполняет парсинг аргументов командной строки
  • функцию flag.Usage,
    которая определяет функцию вывода справки по умолчанию
  • функцию flag.NFlag,
    которая возвращает количество установленных флагов
  • функцию flag.VisitAll,
    которая обходит все зарегистрированные флаги в порядке их объявления