...

パッケージ flag

import "flag"
概要
目次

概要 ▾

flag パッケージはコマンドラインフラグのパースを実装します。

使用法

flag.String(), Bool(), Int() などを使用してフラグを定義します。

これは,ポインタ ip に格納された整数フラグ -flagname を,型 *int で宣言します。

import "flag"
var ip = flag.Int("flagname", 1234, "help message for flagname")

必要に応じて, 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=x
-flag x  // ブール値フラグ以外のみ

1 つまたは 2 つのマイナス記号を使用できます。それらは同等です。 ただし,最後の形式は,ブール値フラグには使用できません。 なぜなら,コマンド

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 のメソッドは,コマンドラインフラグセットの最上位関数に似ています。

コード:

// これらの例は,flag パッケージのより複雑な使い方を示しています。
package flag_test

import (
    "errors"
    "flag"
    "fmt"
    "strings"
    "time"
)

// 例 1: デフォルト値が "gopher" である, "species" という 1 つの文字列フラグ
var species = flag.String("species", "gopher", "the species we are studying")

// 例 2: 2 つのフラグが変数を共有しているので,簡略化することができます。
// 初期化の順序は未定義なので,両方とも同じデフォルト値を使用するようにしてください。
// init 関数で設定する必要があります。
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)")
}

// 例 3: ユーザー定義のフラグ型,Duration のスライス
type interval []time.Duration

// String は, flag.Value インターフェースの一部である,フラグの値をフォーマットするためのメソッドです。
// String メソッドの出力は診断に使用されます。
func (i *interval) String() string {
    return fmt.Sprint(*i)
}

// Set は, flag.Value インターフェースの一部であるフラグ値を設定するためのメソッドです。
// Set の引数は,フラグを設定するために解析される文字列です。
// これはコンマ区切りのリストなので,分割します。
func (i *interval) Set(value string) error {
    // フラグを複数回設定して値を累積できるようにしたい場合は,この if ステートメントを削除します。
    // 以下のような使用法が可能です
    //	-deltaT 10s -deltaT 15s
    // 他の組み合わせも可能です。
    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
}

// Duration を累積するためのフラグを定義します。
// 特別な型のため, Var 関数を使う必要があり,したがって init の間にフラグを作成する必要があります。

var intervalFlag interval

func init() {
    // コマンドラインフラグを intervalFlag 変数に結び付けて,使用法メッセージを設定します。
    flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events")
}

func Example() {
    // 興味深い部分はすべて上で宣言された変数に関するものですが,
    // そこで定義されたフラグを使用するためにフラグパッケージを有効にするには,
    // 通常は main の先頭で (init ではなく!) 以下を実行する必要があります。
    //	flag.Parse()
    // これはメイン関数ではなく,テストスイートはすでにフラグを解析しているので,ここでは実行しません。
}

目次 ▾

変数
func Arg(i int) string
func Args() []string
func Bool(name string, value bool, usage string) *bool
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 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 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) 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) 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) 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

Package
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 は,定義されているすべてのコマンドラインフラグをコマンドラインの出力に記録した使用法メッセージを出力します。 デフォルトでは os.Stderr です。 フラグの解析中にエラーが発生したときに呼び出されます。 関数は,カスタム関数を指すように変更できる変数です。 デフォルトでは単純なヘッダを表示して PrintDefaults を呼び出します。 出力形式とその制御方法についての詳細は, PrintDefaults のマニュアルを参照してください。 カスタムの Usage 関数はプログラムを終了することを選択するかもしれません。 デフォルトでは,コマンドラインのエラー処理方法が 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 フラグを定義します。 戻り値は,フラグの値を格納するブール変数のアドレスです。

func BoolVar

func BoolVar(p *bool, name string, value bool, usage string)

BoolVar は,指定された名前,デフォルト値,および使用法の文字列を使用して bool フラグを定義します。 引数 p は,フラグの値を格納するブール変数を指します。

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 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
	x 用の使用法メッセージ (デフォルト 7)

使用法メッセージは, 1 バイトの名前を持つブールフラグ以外のものについては別の行に表示されます。 bool フラグの場合,型は省略され,フラグ名が 1 バイトの場合,使用法メッセージは同じ行に表示されます。 デフォルトが型のゼロ値である場合,括弧内のデフォルトは省略されます。 リストされている型 (ここでは 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 は,指定された名前,デフォルト値,および使用法の文字列を使用して文字列フラグを定義します。 戻り値は,フラグの値を格納する文字列変数のアドレスです。

func StringVar

func StringVar(p *string, name string, value string, usage string)

StringVar は,指定された名前,デフォルト値,および使用法の文字列を使用して文字列フラグを定義します。 引数 p は,フラグの値を格納する文字列変数を指します。

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 // 説明的なエラーを返します。
    ExitOnError                          // os.Exit(2) を呼び出します。
    PanicOnError                         // 説明的なエラーでパニックを呼び出します。
)

type Flag

フラグはフラグの状態を表します。

type Flag struct {
    Name     string // コマンドラインに表示される名前
    Usage    string // ヘルプメッセージ
    Value    Value  // 設定値
    DefValue string // デフォルト値 (テキストとして) 。使用法メッセージ
}

func Lookup

func Lookup(name string) *Flag

Lookup は指定されたコマンドラインフラグの Flag 構造体を返し,存在しない場合は nil を返します。

type FlagSet

FlagSet は,定義済みフラグのセットを表します。 FlagSet のゼロ値には名前がなく, ContinueOnError エラー処理があります。

type FlagSet struct {
    // Usage は,フラグの解析中にエラーが発生したときに呼び出される関数です。
    // このフィールドは関数であり (メソッドではありません) ,カスタムエラーハンドラを指すように変更できます。
    // Usage が呼び出された後に起こることは ErrorHandling 設定に依存します。
    // コマンドラインの場合,これはデフォルトで ExitOnError になり, Usage を呼び出した後にプログラムを終了します。
    Usage func()
    // エクスポートされていないフィールドがあります
}

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 フラグを定義します。 戻り値は,フラグの値を格納するブール変数のアドレスです。

func (*FlagSet) BoolVar

func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)

BoolVar は,指定された名前,デフォルト値,および使用法の文字列を使用して bool フラグを定義します。 引数 p は,フラグの値を格納するブール変数を指します。

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) 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 は,使用法およびエラーメッセージの出力先を返します。 output が設定されていないか nil に設定されている場合は os.Stderr が返されます。

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) 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 の内容を取得できるようにするためのインターフェースです。 Go 1 とその互換性ルールの後に登場したため, Value インターフェースの一部とするのではなく,ラップしています。 このパッケージが提供するすべての Value 型は Getter インターフェースを満たします。

type Getter interface {
    Value
    Get() interface{}
}

type Value

Value は,フラグに格納された動的値へのインターフェースです。 (デフォルト値は文字列として表されます。)

Value が true を返す IsBoolFlag() bool メソッドを持つ場合,コマンドラインパーサーは次のコマンドライン引数を使用するのではなく, -name を -name=true と同等にします。

Set は,存在する各フラグに対して,コマンドラインの順序で 1 回呼び出されます。 flag パッケージは, nil ポインタなどのゼロ値のレシーバを使って 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/"}
}