はじめに
Go言語でコマンドラインツールを作る際、引数の処理で悩んだことはありませんか?Go標準ライブラリのflag
パッケージを使えば、コマンドライン引数を簡単に処理できます。
この記事では、実際のコードを通してflagパッケージの基本的な使い方を学びます。
flagパッケージとは
flag
パッケージは、Go言語の標準ライブラリの一つで、コマンドライン引数を簡単に処理するためのツールです。
特徴
-
--name=値
や-name 値
形式の引数を自動解析 - デフォルト値の設定が可能
- ヘルプメッセージの自動生成
- 型安全な引数処理
実装例:挨拶CLIツール
実際にflagパッケージを使った簡単なCLIツールを作ってみましょう。
package main
import (
"flag" // コマンドライン引数を簡単に処理するための標準ライブラリ
"fmt"
)
func main() {
// フラグ定義(--name=xxx 形式で使える)
// (--${引数名},デフォルト値,説明文)
name := flag.String("name", "ゲスト", "挨拶する相手の名前")
// フラグ解析
// コマンドライン引数を実際に解析する
// これを呼ばないとフラグが機能しない
flag.Parse()
// 出力
// *name
// ポインタから実際の値を取得
fmt.Printf("こんにちは、%sさん!\n", *name)
}
コードの詳細解説
1. フラグの定義
name := flag.String("name", "ゲスト", "挨拶する相手の名前")
-
第1引数: フラグ名(
--name
として使用) - 第2引数: デフォルト値(引数が指定されない場合の値)
- 第3引数: 説明文(ヘルプで表示される)
-
戻り値:
*string
(文字列のポインタ)
2. フラグの解析
flag.Parse()
コマンドライン引数を実際に解析します。この関数を呼ばないとフラグが機能しません。
3. 値の取得
fmt.Printf("こんにちは、%sさん!\n", *name)
*name
でポインタから実際の値を取得します(デリファレンス)。
実行例
引数を指定した場合
$ go run main.go --name=太郎
こんにちは、太郎さん!
引数を指定しない場合(デフォルト値使用)
$ go run main.go
こんにちは、ゲストさん!
ヘルプの表示
$ go run main.go --help
Usage of main:
-name string
挨拶する相手の名前 (default "ゲスト")
その他のフラグタイプ
flagパッケージは文字列以外にも様々な型をサポートしています:
// 整数
age := flag.Int("age", 0, "年齢")
// 真偽値
verbose := flag.Bool("verbose", false, "詳細出力")
// 浮動小数点
price := flag.Float64("price", 0.0, "価格")
まとめ
-
flag
パッケージを使えば簡単にCLIツールが作れる -
flag.String()
でフラグを定義し、flag.Parse()
で解析 - デフォルト値とヘルプメッセージが自動で設定される
- ポインタを返すので
*
でデリファレンスが必要