Переменная flag.CommandLine
Переменная flag.CommandLine представляет собой указатель
на объект типа FlagSet, который используется
пакетом flag по умолчанию для обработки аргументов
командной строки. Все функции верхнего уровня пакета
flag, такие как flag.String,
flag.Int или flag.Parse, работают именно с
этой переменной. Она позволяет разработчику получить
прямой доступ к стандартному набору флагов для выполнения
дополнительных операций, таких как установка значений
флагов или изменение вывода справки.
Синтаксис
flag.CommandLine
Пример использования flag.CommandLine для получения флагов
В этом примере мы определим два флага, вызовем
flag.Parse для их обработки, а затем с помощью
flag.CommandLine получим доступ к информации
о зарегистрированных флагах:
package main
import (
"flag"
"fmt"
)
func main() {
name := flag.String("name", "World", "name to greet")
age := flag.Int("age", 18, "age of the person")
flag.Parse()
fmt.Printf("Name: %s, Age: %d\n", *name, *age)
fmt.Printf("Default flag set name: %s\n", flag.CommandLine.Name())
flag.VisitAll(func(f *flag.Flag) {
fmt.Printf("Flag: %s, Value: %s\n", f.Name, f.Value)
})
}
Результат выполнения кода:
"Name: World, Age: 18"
"Default flag set name: "
"Flag: age, Value: 18"
"Flag: name, Value: World"
Пример изменения поведения стандартного набора флагов
С помощью flag.CommandLine можно изменить поведение
стандартного парсера, например, отключить вывод справки
при ошибке или изменить настройки вывода:
package main
import (
"flag"
"fmt"
"os"
)
func main() {
flag.CommandLine.SetOutput(os.Stdout)
flag.CommandLine.Usage = func() {
fmt.Println("Custom usage message")
fmt.Println("Flags:")
flag.PrintDefaults()
}
name := flag.String("name", "World", "name to greet")
flag.Parse()
fmt.Printf("Hello, %s!\n", *name)
}
Результат выполнения кода с флагом -help:
"Custom usage message"
"Flags:"
" -name string"
" name to greet (default \"World\")"
Пример использования flag.CommandLine для установки значений
Переменная flag.CommandLine позволяет устанавливать
значения флагов программно через метод Set:
package main
import (
"flag"
"fmt"
)
func main() {
name := flag.String("name", "World", "name to greet")
flag.Parse()
fmt.Printf("Before: %s\n", *name)
err := flag.CommandLine.Set("name", "Go")
if err != nil {
fmt.Println(err)
}
fmt.Printf("After: %s\n", *name)
}
Результат выполнения кода:
"Before: World"
"After: Go"
Смотрите также
-
переменную
os.Args,
которая содержит аргументы командной строки -
функцию
flag.Parse,
которая разбирает аргументы командной строки -
функцию
flag.PrintDefaults,
которая выводит значения по умолчанию для всех флагов -
функцию
flag.Set,
которая устанавливает значение флага