Пакет 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
Флаги Duration принимают любой ввод, допустимый для 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
Переменные
CommandLine — это набор флагов командной строки по умолчанию, полученные из os.Args. Функции верхнего уровня, такие как BoolVar, Arg и так далее, являются обертываниями для методов CommandLine.
var CommandLine = NewFlagSet(os.Args[0], ExitOnError)
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 определяет булев флаг с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес булевой переменной, хранящей значение флага.
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
функция BoolVar
func BoolVar(p *bool, name string, value bool, usage string)
BoolVar определяет флаг bool с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную bool, в которую необходимо сохранить значение флага.
функция Duration
func Duration(name string, value time.Duration, usage string) *time.Duration
Duration определяет флаг time.Duration с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной time.Duration, в которой хранится значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
функция DurationVar
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
DurationVar определяет флаг time.Duration с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную time.Duration, в которую необходимо сохранить значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
функция Float64
func Float64(name string, value float64, usage string) *float64
Float64 определяет флаг float64 с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной float64, в которой хранится значение флага.
функция Float64Var
func Float64Var(p *float64, name string, value float64, usage string)
Float64Var определяет флаг float64 с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную float64, в которую необходимо сохранить значение флага.
функция Func 1.16
func Func(name, usage string, fn func(string) error)
Func определяет флаг с указанным именем и строкой использования. Каждый раз, когда встречается флаг, вызывается функция fn со значением флага. Если fn возвращает ошибку, отличную от nil, она будет обработана как ошибка разбора значения флага.
Пример
Код:
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}
функция Int
func Int(name string, value int, usage string) *int
Int определяет флаг int с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной int, в которой хранится значение флага.
функция Int64
func Int64(name string, value int64, usage string) *int64
Int64 определяет флаг int64 с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной int64, в которой хранится значение флага.
функция Int64Var
func Int64Var(p *int64, name string, value int64, usage string)
Int64Var определяет флаг int64 с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную int64, в которую необходимо сохранить значение флага.
функция IntVar
func IntVar(p *int, name string, value int, usage string)
IntVar определяет флаг int с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную int, в которую необходимо сохранить значение флага.
функция NArg
func NArg() int
NArg — количество аргументов, оставшихся после обработки флагов.
функция NFlag
func NFlag() int
NFlag возвращает количество установленных флагов командной строки.
функция Parse
func Parse()
Parse анализирует флаги командной строки из os.Args[1:]. Должна быть вызвана после определения всех флагов и перед доступом к флагам программой.
функция Parsed
func Parsed() bool
Parsed сообщает, были ли обработаны флаги командной строки.
функция 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.
функция Set
func Set(name, value string) error
Set устанавливает значение указанного флага командной строки.
функция String
func String(name string, value string, usage string) *string
String определяет строковый флаг с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной string, в которой хранится значение флага.
функция StringVar
func StringVar(p *string, name string, value string, usage string)
StringVar определяет строковый флаг с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную string, в которую необходимо сохранить значение флага.
функция TextVar 1.19
func TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)
TextVar определяет флаг с указанным именем, значением по умолчанию и строкой использования. Аргумент p должен быть указателем на переменную, которая будет содержать значение флага, и p должен реализовывать encoding.TextUnmarshaler. Если флаг используется, значение флага будет передано в метод p's UnmarshalText. Тип значения по умолчанию должен совпадать с типом 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>}
функция Uint
func Uint(name string, value uint, usage string) *uint
Uint определяет флаг uint с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной uint, в которой хранится значение флага.
функция Uint64
func Uint64(name string, value uint64, usage string) *uint64
Uint64 определяет флаг uint64 с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной uint64, в которой хранится значение флага.
функция Uint64Var
func Uint64Var(p *uint64, name string, value uint64, usage string)
Uint64Var определяет флаг uint64 с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную uint64, в которую необходимо сохранить значение флага.
функция UintVar
func UintVar(p *uint, name string, value uint, usage string)
UintVar определяет флаг uint с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную uint, в которую необходимо сохранить значение флага.
функция UnquoteUsage 1.5
func UnquoteUsage(flag *Flag) (name string, usage string)
UnquoteUsage извлекает имя в обратных кавычках из строки использования флага и возвращает его и строку использования без кавычек. Учитывая "a `name` to show", возвращает ("name", "a name to show"). Если обратных кавычек нет, имя является образовательным предположением о типе значения флага или пустой строкой, если флаг является булевым.
функция Var
func Var(value Value, name string, usage string)
Var определяет флаг с указанным именем и строкой использования. Тип и значение флага представлены первым аргументом типа Value, который обычно содержит пользовательскую реализацию Value. Например, вызывающий код может создать флаг, который преобразует строку, разделённую запятыми, в срез строк, предоставив срезу методы Value; в частности, Set разложит строку, разделённую запятыми, в срез.
функция Visit
func Visit(fn func(*Flag))
Visit посещает флаги командной строки в лексикографическом порядке, вызывая fn для каждого. Он посещает только те флаги, которые были установлены.
функция VisitAll
func VisitAll(fn func(*Flag))
VisitAll посещает флаги командной строки в лексикографическом порядке, вызывая fn для каждого. Он посещает все флаги, даже те, которые не установлены.
тип 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.
) тип 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
}
функция Lookup
func Lookup(name string) *Flag
Lookup возвращает структуру Flag указанного флага командной строки, возвращая nil, если его нет.
тип 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
}
Пример
Код:
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
функция NewFlagSet
func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet
NewFlagSet возвращает новый пустой набор флагов с указанным именем и свойством обработки ошибок. Если имя не пустое, оно будет напечатано в сообщении об использовании по умолчанию и в сообщениях об ошибках.
функция (*FlagSet) Arg
func (f *FlagSet) Arg(i int) string
Arg возвращает i-й аргумент. Arg(0) — это первый оставшийся аргумент после обработки флагов. Arg возвращает пустую строку, если запрашиваемый элемент не существует.
функция (*FlagSet) Args
func (f *FlagSet) Args() []string
Args возвращает аргументы, не являющиеся флагами.
функция (*FlagSet) Bool
func (f *FlagSet) Bool(name string, value bool, usage string) *bool
Bool определяет флаг bool с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной bool, в которой хранится значение флага.
функция (*FlagSet) BoolFunc 1.21
func (f *FlagSet) BoolFunc(name, usage string, fn func(string) error)
BoolFunc определяет флаг с указанным именем и строкой использования без необходимости значений. Каждый раз, когда встречается флаг, вызывается fn со значением флага. Если fn возвращает ошибку, отличную от nil, она будет обработана как ошибка разбора значения флага.
функция (*FlagSet) BoolVar
func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
BoolVar определяет флаг bool с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную bool, в которую необходимо сохранить значение флага.
функция (*FlagSet) Duration
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration
Duration определяет флаг time.Duration с указанным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной time.Duration, в которой хранится значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
функция (*FlagSet) DurationVar
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)
DurationVar определяет флаг time.Duration с указанным именем, значением по умолчанию и строкой использования. Аргумент p указывает на переменную time.Duration, в которую необходимо сохранить значение флага. Флаг принимает значение, допустимое для time.ParseDuration.
функция (*FlagSet) ErrorHandling 1.10
func (f *FlagSet) ErrorHandling() ErrorHandling
ErrorHandling возвращает поведение обработки ошибок набора флагов.
функция (*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 возвращается, если output не был установлен или был установлен в значение nil.
func (*FlagSet) Parse
func (f *FlagSet) Parse(arguments []string) error
Parse парсит определения флагов из списка аргументов, который не должен включать имя команды. Должен вызываться после определения всех флагов в FlagSet и перед доступом к флагам программой. Возвращаемое значение будет ErrHelp, если -help или -h были установлены, но не определены.
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 определяет строковый флаг со заданным именем, значением по умолчанию и строкой использования. Возвращаемое значение — адрес переменной 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 должен быть указателем на переменную, которая будет хранить значение флага, и 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, анализатор командной строки делает -имя эквивалентным -имя=true, а не использует следующий аргумент командной строки.
Set вызывается один раз, в порядке командной строки, для каждого присутствующего флага. Пакет флагов может вызвать метод String с получателем со значением по умолчанию, например, с нулевым указателем.
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/