コンテンツにスキップ

Go/flag

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Go

flagパッケージ

[編集]

Goの標準ライブラリにあるflagパッケージは、コマンドライン引数を簡単に解析するための機能を提供します。これを使うことで、ユーザーがプログラムの動作をカスタマイズできるようになります。

flagパッケージの基本

[編集]

flagパッケージを使うには、まずフラグを定義します。フラグには、stringboolintなどの型があり、それぞれに対応する関数が用意されています。

  • 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らしい簡潔なコードを書くことができます。