NOGU.D

どっかの大学の学部生のメモ程度の記事

Golangのflagパッケージ

基本的な使い方

パッケージをインポート


import "flag"

フラグの値を格納する変数を定義

flag.String(), Bool(), Int() などを使用してフラグを定義。 フラグを格納するための変数にポインタを返す。

flag.XXXX( <パラメータ名>, <デフォルト値>, <パラメータの説明>)

boolPtr := flag.Bool("b", false, "真偽値の値の例") 
intPtr := flag.Int("i", 0, "数値の場合の例") 
strPtr := flag.String("s", "", "文字列の場合の例")

フラグの解析と取得

flag.Parse()を呼ぶことでコマンドラインの引数のフラグが解析され、フラグが変数にバインドされる。


flag.Parse()

フラグの解析と取得

実際のオプション値を取得するために、*変数名 のようにポインタをデリファレンスする必要がある点に気をつけてください。


fmt.Println(*boolPtr)
fmt.Println(*intPtr)
fmt.Println(*strPtr)

全体のソースコード


package main

import (
  "flag"
  "fmt"
)

func main() {
  boolPtr := flag.Bool("b", false, "真偽値の値の例")
  intPtr := flag.Int("i", 0, "数値の場合の例")
  strPtr := flag.String("s", "", "文字列の場合の例")

  flag.Parse()

  fmt.Println(*boolPtr)
  fmt.Println(*intPtr)
  fmt.Println(*strPtr)
}

ヘルプを表示する

<コマンド> -h または コマンド -help を実行するとコマンドのヘルプ(Usage)が表示されます

実際に以上のサンプルコードを使って実行した結果


% go run main.go -help
Usage of /var/folders/l0/tj5zqgc916vdp_k4wtv4wmd80000gw/T/go-build2703247103/b001/exe/main:
  -b	真偽値の値の例
  -i int
    	数値の場合の例
  -s string
    	文字列の場合の例

その他

サンプル1


package main

import (
    "flag"
    "fmt"
)

func main() {
    var (
        msg   = flag.String("String", "default message.", "is String")
        num   = flag.Uint("Number", 0, "is Nuber")
        debug = flag.Bool("Boolean", false, "True or False")
    )

    flag.Parse()

    fmt.Printf("param -m -> %s\n", *msg)
    fmt.Printf("param -n -> %d\n", *num)
    fmt.Printf("param -debug -> %t\n", *debug)
}

サンプル2


package main

import (
    "flag"
    "fmt"
)

func main() {
    var (
        msg   string
        num   uint
        debug bool
    )

    flag.StringVar(&msg, "m", "default message.", "is String")
    flag.UintVar(&num, "n", 0, "is Nuber")
    flag.BoolVar(&debug, "debug", false, "True or False")

    flag.Parse()

    fmt.Printf("param -m -> %s\n", msg)
    fmt.Printf("param -n -> %d\n", num)
    fmt.Printf("param -debug -> %t\n", debug)
}

参考