Go でフラグに値のリストを取得する
Go では、フラグ パッケージはコマンドライン引数の解析をサポートしています。ただし、当初は限られた範囲のデータ型 (String、Int、Bool) のみを提供していました。より複雑なデータに対応するには、独自のフラグ タイプを定義し、flag.Var() を使用してそれをバインドできます。
リストのカスタム フラグ タイプ
フラグを検討する複数の値をリストとして受け入れます。まず、カスタム フラグ タイプを定義します:
type arrayFlags []string // String is an implementation of the flag.Value interface func (i *arrayFlags) String() string { return fmt.Sprintf("%v", *i) } // Set is an implementation of the flag.Value interface func (i *arrayFlags) Set(value string) error { *i = append(*i, value) return nil }
カスタム フラグの使用
次に、カスタム フラグとバインドするこのタイプの変数を宣言します:
var myFlags arrayFlags
カスタム フラグの登録
最後に、フラグ パッケージを使用してカスタム フラグを登録できます。
flag.Var(&myFlags, "list1", "Some description for this param.")
これで、次のように渡すことができます。プログラムの実行時にこのフラグに複数の値を設定します:
go run your_file.go --list1 value1 --list1 value2
更新されたコード スニペット
参考までに、完全なコード スニペットを次に示します:
package main import ( "flag" "fmt" ) type arrayFlags []string // String is an implementation of the flag.Value interface func (i *arrayFlags) String() string { return fmt.Sprintf("%v", *i) } // Set is an implementation of the flag.Value interface func (i *arrayFlags) Set(value string) error { *i = append(*i, value) return nil } var myFlags arrayFlags func main() { flag.Var(&myFlags, "list1", "Some description for this param.") flag.Parse() }
以上がGo で値のリストのカスタム フラグ タイプを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。