Функция flag.PrintDefaults
Функция flag.PrintDefaults выводит в стандартный вывод (stdout) список всех зарегистрированных флагов командной строки с их описаниями и значениями по умолчанию. Она не принимает никаких параметров и не возвращает значений. Информация выводится в формате, который используется при автоматической генерации справки через flag.Usage. Функция полезна для отладки и для явного вывода справки по флагам в нужный момент выполнения программы.
Синтаксис
flag.PrintDefaults()
Пример
Давайте определим несколько флагов разных типов и выведем их значения по умолчанию:
package 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()
}
Результат выполнения кода:
-active
is user active (default false)
-age int
user age (default 0)
-name string
user name (default "default")
Пример
Давайте выведем значения по умолчанию после парсинга флагов, чтобы показать, что информация не зависит от переданных аргументов:
package 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 результат выполнения кода:
Parsed 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 внутри пользовательской функции для вывода справки:
package 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 результат выполнения кода:
Usage: 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,
которая обходит все зарегистрированные флаги в порядке их объявления