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

Флаги 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.
}

Индекс

  • Переменные
  • 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))
  • тип ErrorHandling
  • тип Flag
  • func Lookup(name string) *Flag
  • тип 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))
  • тип Getter
  • тип Value

Примеры

Пакет
BoolFunc
FlagSet
Func
TextVar
Value

Файлы пакета

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/

Spec-Zone.ru

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