program [-d value] [--abc] [FILE1]
プログラムパラメータのリストを適切に解析し、Go で"--help" や "--version" (" " など) の処理を自動化するにはどうすればよいですか?
9 に答える
Google は、より標準的なコマンド ライン解析を提供するgetoptパッケージ ( ) を作成しました (対「フラグ」パッケージ)。import "github.com/pborman/getopt"
package main
import (
"fmt"
"os"
"github.com/pborman/getopt"
)
func main() {
optName := getopt.StringLong("name", 'n', "", "Your name")
optHelp := getopt.BoolLong("help", 0, "Help")
getopt.Parse()
if *optHelp {
getopt.Usage()
os.Exit(0)
}
fmt.Println("Hello " + *optName + "!")
}
$ ./hello --help
Usage: hello [--help] [-n value] [parameters ...]
--help Help
-n, --name=value Your name
$ ./hello --name Bob
Hello Bob!
「フラグ」パッケージを使用します: http://golang.org/pkg/flag/。ただし、二重ダッシュの引数は行いません。GNU getopt の動作を正確に模倣するものは (まだ) ありません。
「コマンド ライン UI」セクションから、 getopt-long パラメータを解析できるライブラリがいくつかあります。
Go1.0.2で試しました:
- code.google.com/p/opts-go (ドキュメントを参照)。これはあまり機能していません。
- github.com/droundy/goopt (ドキュメントを参照)には、完全なサンプル セットがあります。
例:
package main
import (
"fmt"
goopt "github.com/droundy/goopt"
)
func main() {
fmt.Println("flag")
goopt.NoArg([]string{"--abc"}, "abc param, no value", noabc)
goopt.Description = func() string {
return "Example program for using the goopt flag library."
}
goopt.Version = "1.0"
goopt.Summary = "goopt demonstration program"
goopt.Parse(nil)
}
func noabc() error {
fmt.Println("You should have an --abc parameter")
return nil
}
で提供されるその他のデフォルト パラメータgoopt
:
--help Display the generated help message (calls Help())
--create-manpage Display a manpage generated by the goopt library (uses Author, Suite, etc)
--list-options List all known flags
私はあなたのためにそれを作りました:
package main
import (
"fmt";
"os"
)
func main() {
for i, arg := range os.Args {
if arg == "-help" {
fmt.Printf ("I need somebody\n")
}else if arg == "-version" {
fmt.Printf ("Version Zero\n")
} else {
fmt.Printf("arg %d: %s\n", i, os.Args[i])
}
}
}
https://play.golang.org/p/XtNXG-DhLIも参照してください
テスト:
$ ./8.out -help -version モンキー ビジネス 私は誰かが必要です バージョン ゼロ 引数 3: サル 引数 4: ビジネス
あなたが望むのはdocoptだと思います。詳細については、投稿した以前の回答を参照してください。
シンプルなライブラリとして、2017 年 8 月からgithub.com/rsc/getopt
使用するには、通常どおりパッケージ フラグでフラグを定義します。次に、次のように呼び出してエイリアスを導入します
getopt.Alias
。
getopt.Alias("v", "verbose")
getopt.Aliases
または、エイリアスのリストを定義するために呼び出します。
getopt.Aliases(
"v", "verbose",
"x", "xylophone",
)
と:
一般に、新しいプログラムでは Go フラグの解析が推奨されます。これは、フラグを呼び出すために使用されるダッシュの数についてはそれほど詳しくないためです (
-verbose
or--verbose
と書くことができ、プログラムは気にしません)。このパッケージは、従来の理由から、正確な
getopt(3)
構文を使用することが重要な状況で使用することを意図しています。たとえば、既に を使用している既存のツールを Go で書き直す場合などですgetopt(3)
。