Пакет flag
Обзор
Пакет flag реализует разбор флагов командной строки.
Использование
Определяйте флаги с помощью flag.String, Bool, Int и т. д.
Этот код объявляет целочисленный флаг -n, хранящийся в указателе nFlag типа *int:
import "flag"
var nFlag = flag.Int("n", 1234, "help message for flag n")
При желании можно связать флаг с переменной с помощью функций Var().
var flagvar int
func init() {
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}
Или можно создать пользовательские флаги, удовлетворяющие интерфейсу Value (с указательными получателями), и связать их с разбором флагов с помощью
flag.Var(&flagVal, "name", "help message for flagname")
Для таких флагов значением по умолчанию является начальное значение переменной.
После определения всех флагов вызовите
flag.Parse()
чтобы разобрать командную строку и установить определённые флаги.
После этого флаги можно использовать напрямую. Если вы используете сами флаги, все они являются указателями; если вы связываете их с переменными, это значения.
fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)
После разбора аргументы, следующие за флагами, доступны в виде среза flag.Args или по отдельности с помощью flag.Arg(i). Индексы аргументов находятся в диапазоне от 0 до flag.NArg-1.
Синтаксис флагов командной строки
Допускаются следующие формы:
-flag --flag // double dashes are also permitted -flag=x -flag x // non-boolean flags only
Можно использовать один или два дефиса; они равнозначны. Последняя форма не допускается для логических флагов, поскольку значение команды
cmd -x *
где * — подстановочный знак оболочки Unix, изменится, если существует файл с именем 0, false и т. д. Чтобы отключить логический флаг, необходимо использовать форму -flag=false.
Разбор флагов прекращается непосредственно перед первым аргументом, не являющимся флагом («-» — это аргумент, не являющийся флагом), или после разделителя «--».
Целочисленные флаги принимают значения 1234, 0664, 0x1234, а также отрицательные числа. Логические флаги могут принимать значения:
1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False
Флаги длительности принимают любые значения, допустимые для time.ParseDuration.
Набор флагов командной строки по умолчанию задаётся функциями верхнего уровня. Тип FlagSet позволяет определять независимые наборы флагов, например, для реализации подкоманд в интерфейсе командной строки. Методы FlagSet аналогичны функциям верхнего уровня для набора флагов командной строки.
Пример
Код:
// These examples demonstrate more intricate uses of the flag package.
package flag_test
import (
"errors"
"flag"
"fmt"
"strings"
"time"
)
// Example 1: A single string flag called "species" with default value "gopher".
var species = flag.String("species", "gopher", "the species we are studying")
// Example 2: Two flags sharing a variable, so we can have a shorthand.
// The order of initialization is undefined, so make sure both use the
// same default value. They must be set up with an init function.
var gopherType string
func init() {
const (
defaultGopher = "pocket"
usage = "the variety of gopher"
)
flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)
flag.StringVar(&gopherType, "g", defaultGopher, usage+" (shorthand)")
}
// Example 3: A user-defined flag type, a slice of durations.
type interval []time.Duration
// String is the method to format the flag's value, part of the flag.Value interface.
// The String method's output will be used in diagnostics.
func (i *interval) String() string {
return fmt.Sprint(*i)
}
// Set is the method to set the flag value, part of the flag.Value interface.
// Set's argument is a string to be parsed to set the flag.
// It's a comma-separated list, so we split it.
func (i *interval) Set(value string) error {
// If we wanted to allow the flag to be set multiple times,
// accumulating values, we would delete this if statement.
// That would permit usages such as
// -deltaT 10s -deltaT 15s
// and other combinations.
if len(*i) > 0 {
return errors.New("interval flag already set")
}
for _, dt := range strings.Split(value, ",") {
duration, err := time.ParseDuration(dt)
if err != nil {
return err
}
*i = append(*i, duration)
}
return nil
}
// Define a flag to accumulate durations. Because it has a special type,
// we need to use the Var function and therefore create the flag during
// init.
var intervalFlag interval
func init() {
// Tie the command-line flag to the intervalFlag variable and
// set a usage message.
flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events")
}
func Example() {
// All the interesting pieces are with the variables declared above, but
// to enable the flag package to see the flags defined there, one must
// execute, typically at the start of main (not init!):
// flag.Parse()
// We don't call it here because this code is a function called "Example"
// that is part of the testing suite for the package, which has already
// parsed the flags. When viewed at pkg.go.dev, however, the function is
// renamed to "main" and it could be run as a standalone example.
}
Указатель
Файлы пакета
flag.go
Переменные
ErrHelp — это ошибка, возвращаемая при вызове флага -help или -h, если такой флаг не определён.
var ErrHelp = errors.New("flag: help requested") Usage выводит сообщение об использовании, описывающее все определённые флаги командной строки, в выходной поток CommandLine, которым по умолчанию является os.Stderr. Эта функция вызывается при возникновении ошибки во время разбора флагов. Функция является переменной, которую можно изменить, указав пользовательскую функцию. По умолчанию она выводит простой заголовок и вызывает PrintDefaults; сведения о формате вывода и способах управления им см. в документации по PrintDefaults. Пользовательские функции использования могут завершить программу; по умолчанию программа в любом случае завершается, поскольку стратегия обработки ошибок командной строки установлена в значение ExitOnError.
var Usage = func() {
fmt.Fprintf(CommandLine.Output(), "Usage of %s:\n", os.Args[0])
PrintDefaults()
} func Arg
func Arg(i int) string
Arg возвращает i-й аргумент командной строки. Arg(0) — это первый оставшийся аргумент после обработки флагов. Arg возвращает пустую строку, если запрошенного элемента не существует.
func Args
func Args() []string
Args возвращает аргументы командной строки, не являющиеся флагами.
func Bool
func Bool(name string, value bool, usage string) *bool
Bool определяет флаг типа bool с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной типа bool, в которой хранится значение флага.
func BoolFunc 1.21
func BoolFunc(name, usage string, fn func(string) error)
BoolFunc определяет флаг с указанными именем и строкой описания, не требующий значения. При каждом обнаружении флага вызывается fn со значением флага. Если fn возвращает ненулевую ошибку, она будет рассматриваться как ошибка разбора значения флага.
Пример
Код:
fs := flag.NewFlagSet("ExampleBoolFunc", flag.ContinueOnError)
fs.SetOutput(os.Stdout)
fs.BoolFunc("log", "logs a dummy message", func(s string) error {
fmt.Println("dummy message:", s)
return nil
})
fs.Parse([]string{"-log"})
fs.Parse([]string{"-log=0"})
Вывод:
dummy message: true dummy message: 0
func BoolVar
func BoolVar(p *bool, name string, value bool, usage string)
BoolVar определяет флаг типа bool с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную типа bool, в которой хранится значение флага.
func Duration
func Duration(name string, value time.Duration, usage string) *time.Duration
Duration определяет флаг типа time.Duration с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной типа time.Duration, в которой хранится значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
func DurationVar
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
DurationVar определяет флаг типа time.Duration с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную типа time.Duration, в которой хранится значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
func Float64
func Float64(name string, value float64, usage string) *float64
Float64 определяет флаг типа float64 с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной типа float64, в которой хранится значение флага.
func Float64Var
func Float64Var(p *float64, name string, value float64, usage string)
Float64Var определяет флаг типа float64 с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную типа float64, в которой хранится значение флага.
func Func 1.16
func Func(name, usage string, fn func(string) error)
Func определяет флаг с указанными именем и строкой описания. При каждом обнаружении флага вызывается fn со значением флага. Если fn возвращает ненулевую ошибку, она будет рассматриваться как ошибка разбора значения флага.
Пример
Код:
fs := flag.NewFlagSet("ExampleFunc", flag.ContinueOnError)
fs.SetOutput(os.Stdout)
var ip net.IP
fs.Func("ip", "`IP address` to parse", func(s string) error {
ip = net.ParseIP(s)
if ip == nil {
return errors.New("could not parse IP")
}
return nil
})
fs.Parse([]string{"-ip", "127.0.0.1"})
fmt.Printf("{ip: %v, loopback: %t}\n\n", ip, ip.IsLoopback())
// 256 is not a valid IPv4 component
fs.Parse([]string{"-ip", "256.0.0.1"})
fmt.Printf("{ip: %v, loopback: %t}\n\n", ip, ip.IsLoopback())
Вывод:
{ip: 127.0.0.1, loopback: true}
invalid value "256.0.0.1" for flag -ip: could not parse IP
Usage of ExampleFunc:
-ip IP address
IP address to parse
{ip: <nil>, loopback: false}
func Int
func Int(name string, value int, usage string) *int
Int определяет флаг типа int с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной типа int, в которой хранится значение флага.
func Int64
func Int64(name string, value int64, usage string) *int64
Int64 определяет флаг типа int64 с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной типа int64, в которой хранится значение флага.
func Int64Var
func Int64Var(p *int64, name string, value int64, usage string)
Int64Var определяет флаг типа int64 с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную типа int64, в которой хранится значение флага.
func IntVar
func IntVar(p *int, name string, value int, usage string)
IntVar определяет флаг типа int с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную типа int, в которой хранится значение флага.
func NArg
func NArg() int
NArg — это количество аргументов, оставшихся после обработки флагов.
func NFlag
func NFlag() int
NFlag возвращает количество установленных флагов командной строки.
func Parse
func Parse()
Parse разбирает флаги командной строки из os.Args[1:]. Функцию необходимо вызвать после определения всех флагов и до того, как программа обратится к флагам.
func Parsed
func Parsed() bool
Parsed сообщает, были ли разобраны флаги командной строки.
func PrintDefaults
func PrintDefaults()
PrintDefaults выводит сообщение об использовании со значениями по умолчанию для всех определённых флагов командной строки — в стандартный поток ошибок, если не настроено иное. Для флага x со значением целочисленного типа вывод по умолчанию имеет следующий вид:
-x int usage-message-for-x (default 7)
Для всех флагов, кроме флага типа bool с однобайтовым именем, сообщение об использовании будет выведено на отдельной строке. Для флагов типа bool тип не указывается, и если имя флага состоит из одного байта, сообщение об использовании выводится в той же строке. Значение по умолчанию в скобках не указывается, если оно является нулевым значением для данного типа. Указанный тип, в данном случае int, можно изменить, поместив в строку описания флага имя в обратных кавычках; первый такой элемент в сообщении считается именем параметра, которое нужно вывести в сообщении, а обратные кавычки удаляются при отображении. Например, для
flag.String("I", "", "search `directory` for include files")
вывод будет следующим:
-I directory search directory for include files.
Чтобы изменить место вывода сообщений о флагах, вызовите CommandLine.SetOutput.
func Set
func Set(name, value string) error
Set устанавливает значение указанного флага командной строки.
func String
func String(name string, value string, usage string) *string
String определяет флаг типа string с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной типа string, в которой хранится значение флага.
func StringVar
func StringVar(p *string, name string, value string, usage string)
StringVar определяет флаг типа string с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную типа string, в которой хранится значение флага.
func TextVar 1.19
func TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)
TextVar определяет флаг с указанными именем, значением по умолчанию и строкой описания. Аргумент p должен быть указателем на переменную, в которой будет храниться значение флага, а p должен реализовывать encoding.TextUnmarshaler. Если используется флаг, его значение будет передано методу UnmarshalText объекта p. Тип значения по умолчанию должен совпадать с типом p.
Пример
Код:
fs := flag.NewFlagSet("ExampleTextVar", flag.ContinueOnError)
fs.SetOutput(os.Stdout)
var ip net.IP
fs.TextVar(&ip, "ip", net.IPv4(192, 168, 0, 100), "`IP address` to parse")
fs.Parse([]string{"-ip", "127.0.0.1"})
fmt.Printf("{ip: %v}\n\n", ip)
// 256 is not a valid IPv4 component
ip = nil
fs.Parse([]string{"-ip", "256.0.0.1"})
fmt.Printf("{ip: %v}\n\n", ip)
Вывод:
{ip: 127.0.0.1}
invalid value "256.0.0.1" for flag -ip: invalid IP address: 256.0.0.1
Usage of ExampleTextVar:
-ip IP address
IP address to parse (default 192.168.0.100)
{ip: <nil>}
func Uint
func Uint(name string, value uint, usage string) *uint
Uint определяет флаг uint с указанным именем, значением по умолчанию и строкой описания использования. Возвращаемое значение — адрес переменной uint, в которой хранится значение флага.
func Uint64
func Uint64(name string, value uint64, usage string) *uint64
Uint64 определяет флаг uint64 с указанным именем, значением по умолчанию и строкой описания использования. Возвращаемое значение — адрес переменной uint64, в которой хранится значение флага.
func Uint64Var
func Uint64Var(p *uint64, name string, value uint64, usage string)
Uint64Var определяет флаг uint64 с указанным именем, значением по умолчанию и строкой описания использования. Аргумент p указывает на переменную uint64, в которой хранится значение флага.
func UintVar
func UintVar(p *uint, name string, value uint, usage string)
UintVar определяет флаг uint с указанным именем, значением по умолчанию и строкой описания использования. Аргумент p указывает на переменную uint, в которой хранится значение флага.
func UnquoteUsage 1.5
func UnquoteUsage(flag *Flag) (name string, usage string)
UnquoteUsage извлекает имя в обратных кавычках из строки описания использования флага и возвращает его вместе со строкой описания без кавычек. Для строки "a `name` to show" функция возвращает ("name", "a name to show"). Если обратных кавычек нет, имя представляет собой обоснованное предположение о типе значения флага либо пустую строку, если флаг имеет логический тип.
func Var
func Var(value Value, name string, usage string)
Var определяет флаг с указанными именем и строкой описания использования. Тип и значение флага задаются первым аргументом типа Value, который обычно содержит пользовательскую реализацию Value. Например, вызывающий код может создать флаг, преобразующий строку со значениями, разделёнными запятыми, в срез строк, предоставив срезу методы Value; в частности, Set будет разбирать строку со значениями, разделёнными запятыми, и помещать их в срез.
func Visit
func Visit(fn func(*Flag))
Visit обходит флаги командной строки в лексикографическом порядке, вызывая fn для каждого из них. Обход выполняется только для установленных флагов.
func VisitAll
func VisitAll(fn func(*Flag))
VisitAll обходит флаги командной строки в лексикографическом порядке, вызывая fn для каждого из них. Обход выполняется для всех флагов, включая неустановленные.
type ErrorHandling
ErrorHandling определяет поведение FlagSet.Parse в случае ошибки разбора.
type ErrorHandling int
Эти константы определяют поведение FlagSet.Parse в случае ошибки разбора.
const (
ContinueOnError ErrorHandling = iota // Return a descriptive error.
ExitOnError // Call os.Exit(2) or for -h/-help Exit(0).
PanicOnError // Call panic with a descriptive error.
) type Flag
Flag представляет состояние флага.
type Flag struct {
Name string // name as it appears on command line
Usage string // help message
Value Value // value as set
DefValue string // default value (as text); for usage message
}
func Lookup
func Lookup(name string) *Flag
Lookup возвращает структуру Flag для указанного флага командной строки или nil, если такой флаг не существует.
type FlagSet
FlagSet представляет набор определённых флагов. Нулевое значение FlagSet не имеет имени и использует обработку ошибок ContinueOnError.
Имена Flag в пределах одного FlagSet должны быть уникальными. Попытка определить флаг с уже используемым именем вызовет панику.
type FlagSet struct {
// Usage is the function called when an error occurs while parsing flags.
// The field is a function (not a method) that may be changed to point to
// a custom error handler. What happens after Usage is called depends
// on the ErrorHandling setting; for the command line, this defaults
// to ExitOnError, which exits the program after calling Usage.
Usage func()
// contains filtered or unexported fields
}
CommandLine — это набор флагов командной строки по умолчанию, разбираемых из os.Args. Функции верхнего уровня, такие как BoolVar, Arg и другие, являются обёртками для методов CommandLine.
var CommandLine *FlagSet
Пример
Код:
start := func(args []string) {
// A real program (not an example) would use flag.ExitOnError.
fs := flag.NewFlagSet("start", flag.ContinueOnError)
addr := fs.String("addr", ":8080", "`address` to listen on")
if err := fs.Parse(args); err != nil {
fmt.Printf("error: %s", err)
return
}
fmt.Printf("starting server on %s\n", *addr)
}
stop := func(args []string) {
fs := flag.NewFlagSet("stop", flag.ContinueOnError)
timeout := fs.Duration("timeout", time.Second, "stop timeout duration")
if err := fs.Parse(args); err != nil {
fmt.Printf("error: %s", err)
return
}
fmt.Printf("stopping server (timeout=%v)\n", *timeout)
}
main := func(args []string) {
subArgs := args[2:] // Drop program name and command.
switch args[1] {
case "start":
start(subArgs)
case "stop":
stop(subArgs)
default:
fmt.Printf("error: unknown command - %q\n", args[1])
// In a real program (not an example) print to os.Stderr and exit the program with non-zero value.
}
}
main([]string{"httpd", "start", "-addr", ":9999"})
main([]string{"httpd", "stop"})
main([]string{"http", "start", "-log-level", "verbose"})
Вывод:
starting server on :9999 stopping server (timeout=1s) error: flag provided but not defined: -log-level
func NewFlagSet
func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet
NewFlagSet возвращает новый пустой набор флагов с указанными именем и параметром обработки ошибок. Если имя не пустое, оно будет выведено в сообщении об использовании по умолчанию и в сообщениях об ошибках.
func (*FlagSet) Arg
func (f *FlagSet) Arg(i int) string
Arg возвращает аргумент с индексом i. Arg(0) — это первый оставшийся аргумент после обработки флагов. Arg возвращает пустую строку, если запрошенный элемент не существует.
func (*FlagSet) Args
func (f *FlagSet) Args() []string
Args возвращает аргументы, не являющиеся флагами.
func (*FlagSet) Bool
func (f *FlagSet) Bool(name string, value bool, usage string) *bool
Bool определяет флаг bool с указанным именем, значением по умолчанию и строкой описания использования. Возвращаемое значение — адрес переменной bool, в которой хранится значение флага.
func (*FlagSet) BoolFunc 1.21
func (f *FlagSet) BoolFunc(name, usage string, fn func(string) error)
BoolFunc определяет флаг с указанными именем и строкой описания использования, не требующий значений. При каждом обнаружении флага fn вызывается со значением флага. Если fn возвращает ошибку, отличную от nil, она будет обработана как ошибка разбора значения флага.
func (*FlagSet) BoolVar
func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
BoolVar определяет флаг bool с указанным именем, значением по умолчанию и строкой описания использования. Аргумент p указывает на переменную bool, в которой хранится значение флага.
func (*FlagSet) Duration
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration
Duration определяет флаг time.Duration с указанным именем, значением по умолчанию и строкой описания использования. Возвращаемое значение — адрес переменной time.Duration, в которой хранится значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
func (*FlagSet) DurationVar
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)
DurationVar определяет флаг time.Duration с указанным именем, значением по умолчанию и строкой описания использования. Аргумент p указывает на переменную time.Duration, в которой хранится значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
func (*FlagSet) ErrorHandling 1.10
func (f *FlagSet) ErrorHandling() ErrorHandling
ErrorHandling возвращает режим обработки ошибок набора флагов.
func (*FlagSet) Float64
func (f *FlagSet) Float64(name string, value float64, usage string) *float64
Float64 определяет флаг float64 с указанным именем, значением по умолчанию и строкой описания использования. Возвращаемое значение — адрес переменной float64, в которой хранится значение флага.
func (*FlagSet) Float64Var
func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string)
Float64Var определяет флаг float64 с указанным именем, значением по умолчанию и строкой описания использования. Аргумент p указывает на переменную float64, в которой хранится значение флага.
func (*FlagSet) Func 1.16
func (f *FlagSet) Func(name, usage string, fn func(string) error)
Func определяет флаг с указанными именем и строкой описания использования. При каждом обнаружении флага fn вызывается со значением флага. Если fn возвращает ошибку, отличную от nil, она будет обработана как ошибка разбора значения флага.
func (*FlagSet) Init
func (f *FlagSet) Init(name string, errorHandling ErrorHandling)
Init задаёт имя и параметр обработки ошибок для набора флагов. По умолчанию нулевое значение FlagSet использует пустое имя и политику обработки ошибок ContinueOnError.
func (*FlagSet) Int
func (f *FlagSet) Int(name string, value int, usage string) *int
Int определяет флаг int с указанным именем, значением по умолчанию и строкой описания использования. Возвращаемое значение — адрес переменной int, в которой хранится значение флага.
func (*FlagSet) Int64
func (f *FlagSet) Int64(name string, value int64, usage string) *int64
Int64 определяет флаг int64 с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной int64, в которой хранится значение флага.
func (*FlagSet) Int64Var
func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string)
Int64Var определяет флаг int64 с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную int64, в которой хранится значение флага.
func (*FlagSet) IntVar
func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
IntVar определяет флаг int с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную int, в которой хранится значение флага.
func (*FlagSet) Lookup
func (f *FlagSet) Lookup(name string) *Flag
Lookup возвращает структуру Flag для флага с указанным именем или nil, если такой флаг не существует.
func (*FlagSet) NArg
func (f *FlagSet) NArg() int
NArg возвращает количество аргументов, оставшихся после обработки флагов.
func (*FlagSet) NFlag
func (f *FlagSet) NFlag() int
NFlag возвращает количество установленных флагов.
func (*FlagSet) Name 1.10
func (f *FlagSet) Name() string
Name возвращает имя набора флагов.
func (*FlagSet) Output 1.10
func (f *FlagSet) Output() io.Writer
Output возвращает назначение для сообщений об использовании и ошибок. Возвращается os.Stderr, если назначение не задано или задано равным nil.
func (*FlagSet) Parse
func (f *FlagSet) Parse(arguments []string) error
Parse разбирает определения флагов из списка аргументов, который не должен содержать имя команды. Этот метод необходимо вызывать после определения всех флагов в FlagSet и до обращения программы к флагам. Если были заданы -help или -h, но они не определены, возвращаемым значением будет ErrHelp.
func (*FlagSet) Parsed
func (f *FlagSet) Parsed() bool
Parsed сообщает, был ли вызван f.Parse.
func (*FlagSet) PrintDefaults
func (f *FlagSet) PrintDefaults()
PrintDefaults выводит значения по умолчанию всех определённых флагов командной строки в наборе в стандартный поток ошибок, если не настроено иное. Дополнительные сведения см. в документации глобальной функции PrintDefaults.
func (*FlagSet) Set
func (f *FlagSet) Set(name, value string) error
Set задаёт значение флага с указанным именем.
func (*FlagSet) SetOutput
func (f *FlagSet) SetOutput(output io.Writer)
SetOutput задаёт назначение для сообщений об использовании и ошибок. Если output равен nil, используется os.Stderr.
func (*FlagSet) String
func (f *FlagSet) String(name string, value string, usage string) *string
String определяет строковый флаг с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес строковой переменной, в которой хранится значение флага.
func (*FlagSet) StringVar
func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
StringVar определяет строковый флаг с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на строковую переменную, в которой хранится значение флага.
func (*FlagSet) TextVar 1.19
func (f *FlagSet) TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)
TextVar определяет флаг с указанными именем, значением по умолчанию и строкой описания. Аргумент p должен быть указателем на переменную, в которой будет храниться значение флага, а также должен реализовывать encoding.TextUnmarshaler. Если флаг используется, его значение передаётся методу UnmarshalText переменной p. Тип значения по умолчанию должен совпадать с типом p.
func (*FlagSet) Uint
func (f *FlagSet) Uint(name string, value uint, usage string) *uint
Uint определяет флаг uint с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной uint, в которой хранится значение флага.
func (*FlagSet) Uint64
func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64
Uint64 определяет флаг uint64 с указанными именем, значением по умолчанию и строкой описания. Возвращаемое значение — адрес переменной uint64, в которой хранится значение флага.
func (*FlagSet) Uint64Var
func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string)
Uint64Var определяет флаг uint64 с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную uint64, в которой хранится значение флага.
func (*FlagSet) UintVar
func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string)
UintVar определяет флаг uint с указанными именем, значением по умолчанию и строкой описания. Аргумент p указывает на переменную uint, в которой хранится значение флага.
func (*FlagSet) Var
func (f *FlagSet) Var(value Value, name string, usage string)
Var определяет флаг с указанными именем и строкой описания. Тип и значение флага представлены первым аргументом типа Value, который обычно содержит определяемую пользователем реализацию Value. Например, вызывающий код может создать флаг, преобразующий строку с элементами, разделёнными запятыми, в срез строк, реализовав для среза методы Value; в частности, Set будет разбивать строку с элементами, разделёнными запятыми, на элементы среза.
func (*FlagSet) Visit
func (f *FlagSet) Visit(fn func(*Flag))
Visit перебирает флаги в лексикографическом порядке, вызывая для каждого fn. Перебираются только установленные флаги.
func (*FlagSet) VisitAll
func (f *FlagSet) VisitAll(fn func(*Flag))
VisitAll перебирает флаги в лексикографическом порядке, вызывая для каждого fn. Перебираются все флаги, в том числе неустановленные.
type Getter 1.2
Getter — это интерфейс, позволяющий получить содержимое Value. Он оборачивает интерфейс Value, а не является его частью, поскольку появился после Go 1 и его правил совместимости. Все типы Value, предоставляемые этим пакетом, реализуют интерфейс Getter, кроме типа, используемого в Func.
type Getter interface {
Value
Get() any
} type Value
Value — это интерфейс динамического значения, хранящегося во флаге. (Значение по умолчанию представлено строкой.)
Если у Value есть метод IsBoolFlag() bool, возвращающий true, анализатор командной строки рассматривает -name как -name=true, а не использует следующий аргумент командной строки.
Set вызывается один раз для каждого присутствующего флага в порядке следования аргументов командной строки. Пакет flag может вызвать метод String для получателя с нулевым значением, например для nil-указателя.
type Value interface {
String() string
Set(string) error
} Пример
Код:
package flag_test
import (
"flag"
"fmt"
"net/url"
)
type URLValue struct {
URL *url.URL
}
func (v URLValue) String() string {
if v.URL != nil {
return v.URL.String()
}
return ""
}
func (v URLValue) Set(s string) error {
if u, err := url.Parse(s); err != nil {
return err
} else {
*v.URL = *u
}
return nil
}
var u = &url.URL{}
func ExampleValue() {
fs := flag.NewFlagSet("ExampleValue", flag.ExitOnError)
fs.Var(&URLValue{u}, "url", "URL to parse")
fs.Parse([]string{"-url", "https://golang.org/pkg/flag/"})
fmt.Printf(`{scheme: %q, host: %q, path: %q}`, u.Scheme, u.Host, u.Path)
// Output:
// {scheme: "https", host: "golang.org", path: "/pkg/flag/"}
}
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/flag/