Функция flag.VisitAll
Функция flag.VisitAll выполняет обход всех объявленных флагов
командной строки. Она принимает один параметр — функцию обратного вызова,
которая вызывается для каждого флага. Данная функция полезна для вывода
информации о всех доступных флагах, их значений по умолчанию или
для выполнения каких-либо действий с каждым флагом.
Синтаксис
flag.VisitAll(fn func(*flag.Flag))
Пример
Давайте объявим несколько флагов разных типов и воспользуемся функцией
flag.VisitAll для вывода их названий и значений:
package main
import (
"flag"
"fmt"
)
func main() {
name := flag.String("name", "Guest", "user name")
age := flag.Int("age", 18, "user age")
active := flag.Bool("active", false, "user active status")
flag.Parse()
flag.VisitAll(func(f *flag.Flag) {
fmt.Printf("Flag: -%s, value: %s, default: %s\n", f.Name, f.Value.String(), f.DefValue)
})
}
Результат выполнения кода:
"Flag: -active, value: false, default: false"
"Flag: -age, value: 18, default: 18"
"Flag: -name, value: Guest, default: Guest"
Пример
Используем функцию flag.VisitAll для форматированного вывода
справки по всем доступным флагам:
package main
import (
"flag"
"fmt"
)
func main() {
host := flag.String("host", "localhost", "server host")
port := flag.Int("port", 8080, "server port")
debug := flag.Bool("debug", false, "enable debug mode")
flag.Parse()
fmt.Println("Available flags:")
flag.VisitAll(func(f *flag.Flag) {
fmt.Printf(" -%s: %s (default: %s)\n", f.Name, f.Usage, f.DefValue)
})
}
Результат выполнения кода:
"Available flags:"
" -debug: enable debug mode (default: false)"
" -host: server host (default: localhost)"
" -port: server port (default: 8080)"
Пример
Функция flag.VisitAll полезна для создания собственной справки
или логирования всех переданных флагов в произвольном формате:
package main
import (
"flag"
"fmt"
"strings"
)
func main() {
config := flag.String("config", "config.yaml", "path to config file")
timeout := flag.Int("timeout", 30, "timeout in seconds")
verbose := flag.Bool("verbose", false, "enable verbose output")
flag.Parse()
var flagsInfo []string
flag.VisitAll(func(f *flag.Flag) {
flagsInfo = append(flagsInfo, fmt.Sprintf("%s=%s", f.Name, f.Value.String()))
})
fmt.Printf("Flags: [%s]\n", strings.Join(flagsInfo, ", "))
}
Результат выполнения кода:
"Flags: [config=config.yaml, timeout=30, verbose=false]"
Смотрите также
-
функцию
flag.Visit,
которая обходит только установленные флаги -
функцию
flag.Parse,
которая выполняет разбор командной строки -
функцию
flag.PrintDefaults,
которая выводит значения по умолчанию для всех флагов -
структуру
flag.FlagSet,
которая позволяет создавать собственные наборы флагов