Spec-Zone.ru › Go

Пакет flag

  • import "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.
}

Указатель

  • Переменные
  • func Arg(i int) string
  • func Args() []string
  • func Bool(name string, value bool, usage string) *bool
  • func BoolFunc(name, usage string, fn func(string) error)
  • func BoolVar(p *bool, name string, value bool, usage string)
  • func Duration(name string, value time.Duration, usage string) *time.Duration
  • func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
  • func Float64(name string, value float64, usage string) *float64
  • func Float64Var(p *float64, name string, value float64, usage string)
  • func Func(name, usage string, fn func(string) error)
  • func Int(name string, value int, usage string) *int
  • func Int64(name string, value int64, usage string) *int64
  • func Int64Var(p *int64, name string, value int64, usage string)
  • func IntVar(p *int, name string, value int, usage string)
  • func NArg() int
  • func NFlag() int
  • func Parse()
  • func Parsed() bool
  • func PrintDefaults()
  • func Set(name, value string) error
  • func String(name string, value string, usage string) *string
  • func StringVar(p *string, name string, value string, usage string)
  • func TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)
  • func Uint(name string, value uint, usage string) *uint
  • func Uint64(name string, value uint64, usage string) *uint64
  • func Uint64Var(p *uint64, name string, value uint64, usage string)
  • func UintVar(p *uint, name string, value uint, usage string)
  • func UnquoteUsage(flag *Flag) (name string, usage string)
  • func Var(value Value, name string, usage string)
  • func Visit(fn func(*Flag))
  • func VisitAll(fn func(*Flag))
  • type ErrorHandling
  • type Flag
  • func Lookup(name string) *Flag
  • type FlagSet
  • func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet
  • func (f *FlagSet) Arg(i int) string
  • func (f *FlagSet) Args() []string
  • func (f *FlagSet) Bool(name string, value bool, usage string) *bool
  • func (f *FlagSet) BoolFunc(name, usage string, fn func(string) error)
  • func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
  • func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration
  • func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)
  • func (f *FlagSet) ErrorHandling() ErrorHandling
  • func (f *FlagSet) Float64(name string, value float64, usage string) *float64
  • func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string)
  • func (f *FlagSet) Func(name, usage string, fn func(string) error)
  • func (f *FlagSet) Init(name string, errorHandling ErrorHandling)
  • func (f *FlagSet) Int(name string, value int, usage string) *int
  • func (f *FlagSet) Int64(name string, value int64, usage string) *int64
  • func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string)
  • func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
  • func (f *FlagSet) Lookup(name string) *Flag
  • func (f *FlagSet) NArg() int
  • func (f *FlagSet) NFlag() int
  • func (f *FlagSet) Name() string
  • func (f *FlagSet) Output() io.Writer
  • func (f *FlagSet) Parse(arguments []string) error
  • func (f *FlagSet) Parsed() bool
  • func (f *FlagSet) PrintDefaults()
  • func (f *FlagSet) Set(name, value string) error
  • func (f *FlagSet) SetOutput(output io.Writer)
  • func (f *FlagSet) String(name string, value string, usage string) *string
  • func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
  • func (f *FlagSet) TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string)
  • func (f *FlagSet) Uint(name string, value uint, usage string) *uint
  • func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64
  • func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string)
  • func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string)
  • func (f *FlagSet) Var(value Value, name string, usage string)
  • func (f *FlagSet) Visit(fn func(*Flag))
  • func (f *FlagSet) VisitAll(fn func(*Flag))
  • type Getter
  • type Value

Примеры

Пакет
BoolFunc
FlagSet
Func
TextVar
Value

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API