codegangsta/cliでサブコマンドをとらないコマンドをつくる
GoのCLI作成用モジュールのcodegangsta/cliは
$ mycmd list
$ mycmd add hoge
$ mycmd remove hoge
のようなサブコマンドを取るのが前提になっているようで、サブコマンドを何も登録しなくてもhelp
サブコマンド(サブコマンドごとのhelpを表示するサブコマンド)がデフォルトで設定され、helpも次のように表示される。
$ mycmd -h
NAME:
mycmd - A new cli application
USAGE:
mycmd [global options] command [command options] [arguments...]
VERSION:
0.0.0
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version
サブコマンドいらないのでオプション以外は全部argsとして受け取るようなコマンドを作りたい、でもFlagsとかshow helpの機能は便利なのでcodegangsta/cliを使いたい。
まずはデフォルトのhelpコマンドを無効にする。
func main() {
app := cli.NewApp()
app.Name = "mycmd"
app.HideHelp = true // これ
app.Action = func(c *cli.Context) {
log.Println(c.Args())
}
app.Run(os.Args)
}
HideHelpをtrueにすると--help
のフラグもなくなるので、こっちは有効にしたい。cli.HelpFlag
をFlags
に追加する。
app.Flags = []cli.Flag{
cli.HelpFlag,
}
これで期待通りの動作にはなるんだけど、helpメッセージは相変わらずサブコマンドを取るようなメッセージになるので、これも書き換える。
cli.AppHelpTemplate = `NAME:
{{.Name}} - {{.Usage}}
USAGE:
{{.Name}} [options] [arguments...]
VERSION:
{{.Version}}{{if or .Author .Email}}
AUTHOR:{{if .Author}}
{{.Author}}{{if .Email}} - <{{.Email}}>{{end}}{{else}}
{{.Email}}{{end}}{{end}}
OPTIONS:
{{range .Flags}}{{.}}
{{end}}
`
これでオプション以外の引数はArgsになってhelpメッセージはこうなる。
$ mycmd --help
NAME:
mycmd - A new cli application
USAGE:
mycmd [options] [arguments...]
VERSION:
0.0.0
OPTIONS:
--help, -h show help
--version, -v print the version
Author And Source
この問題について(codegangsta/cliでサブコマンドをとらないコマンドをつくる), 我々は、より多くの情報をここで見つけました https://qiita.com/hokaccha/items/a434c024e0990169aaf6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .