Go/flag
表示
< Go
flagパッケージ
[編集]Goの標準ライブラリにあるflagパッケージは、コマンドライン引数を簡単に解析するための機能を提供します。これを使うことで、ユーザーがプログラムの動作をカスタマイズできるようになります。
flagパッケージの基本
[編集]flagパッケージを使うには、まずフラグを定義します。フラグには、string、bool、intなどの型があり、それぞれに対応する関数が用意されています。
flag.String(): 文字列のフラグを定義します。flag.Bool(): 真偽値のフラグを定義します。flag.Int(): 整数値のフラグを定義します。
これらの関数は、それぞれポインタを返します。このポインタを通して、ユーザーが入力した値にアクセスします。
- 関数の構文
flag.Type(name, defaultValue, usage)
name: フラグの名前(例:-name)defaultValue: フラグが指定されなかった場合のデフォルト値usage: フラグの簡単な説明(-hや--helpで表示される)
サンプルコード
[編集]簡単なhello.goプログラムでflagの使い方を見てみましょう。このプログラムは、--nameフラグで指定された名前を使って挨拶をします。
package main import ( "flag" "fmt" ) func main() { // --nameフラグを定義。デフォルト値は"World"、説明は"名前を指定します" name := flag.String("name", "World", "名前を指定します") // コマンドライン引数を解析 flag.Parse() // フラグの値にアクセスするには、ポインタをデリファレンスする fmt.Printf("Hello, %s!\n", *name) }
プログラムの実行
[編集]上記のプログラムをビルドし、実行してみましょう。
- フラグを指定しない場合
$ go run hello.go Hello, World!
- フラグを指定する場合
$ go run hello.go --name=Gopher Hello, Gopher!
- ヘルプメッセージを表示する場合
flag.Parse()が呼び出されると、自動的に-hまたは--helpフラグが処理され、定義したフラグの使用方法が表示されます。$ go run hello.go --help Usage of .../hello: -name string 名前を指定します (default "World")
flag.Args()とflag.NArg()
[編集]flag.Parse()を実行すると、フラグ以外の引数(非フラグ引数)も処理されます。これらはflag.Args()でスライスとして取得でき、flag.NArg()でその数を取得できます。
- 例
go run hello.go --name=Gopher file1.txt file2.txtと実行した場合、flag.Args()は["file1.txt", "file2.txt"]を返します。
flagパッケージは、シンプルながらも強力なコマンドライン引数処理のツールです。より複雑なCLIツールを作成する場合でも、このパッケージをベースにすることで、Goらしい簡潔なコードを書くことができます。