Goのドキュメント( http://golang.org/pkg/flag/ )には次のように書かれています。
FlagSetタイプを使用すると、コマンドラインインターフェイスにサブコマンドを実装するなど、独立したフラグのセットを定義できます。
この機能が必要ですが、flagpkgにそれを実行するように説得する方法がわかりません。 2つのFlagSetを定義するときに、コマンドラインに2番目のフラグを対象としたフラグがある場合、そのうちの1つを解析するとエラーと警告が表示されます。例:
_f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
apply := f1.Bool("apply", false, "")
silent := f1.Bool("silent", false, "")
if err := f1.Parse(os.Args[1:]); err == nil {
fmt.Println(*apply, *silent)
}
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
reset := f2.Bool("reset", false, "")
if err := f2.Parse(os.Args[1:]); err == nil {
fmt.Println(*reset)
}
_
_cmd -apply
_ OR _cmd -reset
_を実行しようとすると、あらゆる種類の警告が表示されます。_-silent
_のみが必要なため、これらのFlagSetを分離したい_-apply
_のために働きます。
何が足りないのですか?
最初にサブコマンドを区別してから、右側のParse
でFlagSet
を呼び出すことを目的としています。
f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
silent := f1.Bool("silent", false, "")
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
loud := f2.Bool("loud", false, "")
switch os.Args[1] {
case "apply":
if err := f1.Parse(os.Args[2:]); err == nil {
fmt.Println("apply", *silent)
}
case "reset":
if err := f2.Parse(os.Args[2:]); err == nil {
fmt.Println("reset", *loud)
}
}
これらのコードを変更するだけです
if err := f2.Parse(os.Args[1:]); err == nil {
fmt.Println(*reset)
}
に
f2.Parse(os.Args[1:])
fmt.Println(*reset)
ただし、警告はコンソールに残されています。削除する場合は、/ usr/local/go/src/flag/flag.goを変更して、golangを再コンパイルするか、flagパッケージのコピーを実行してください。
→_→怀疑的眼神~~