Tags: Go Golang

Go でコマンドライン引数を扱う

Go で名前付きのコマンドライン引数を扱う方法および OGP 画像生成ツール公開の宣伝。

~~告知~~

OGP 画像生成ツールを公開しました。

https://github.com/k1350/ogpgen

この記事に設定している OGP 画像は上記ツールを使用しています。

せっかくなのでバイナリ配布しようかと思ったのですが、ライセンス関連が面倒だったのでやめました。自分でビルドしてください。

~~告知終わり~~

開発環境

  • go version go1.16.5 linux/amd64

本文

Go で名前付きのコマンドライン引数を扱う方法だが、flag パッケージを用いると簡単にできる。

https://golang.org/pkg/flag/

引数の型指定やデフォルト値の設定までできて大変便利。

fsize := flag.Float64("fsize", 100.0, "Font Size")
tmargin := flag.Int("tmargin", 0, "Top Margin")
out := flag.String("o", "out.jpg", "Output File Path")

flag.Parse()

このように引数名、デフォルト値、引数の説明を書いて flag.Parse() とすると、各変数にパースされた値が入る。

使用する場合は

fmt.Println("fsize ", *fsize)

のようにする。

実行時は

.\ogpgen -text="OGP 画像生成ツール" -bpath="/your_template/template.jpg" -fpath="/your_font/03SmartFontUI.ttf"

こんな感じで使える。

型に合わない値を実行時に指定すると下記のようにパースエラーが出て、すべての引数の説明が書きだされる。

invalid value "text" for flag -fsize: parse error
Usage of ogpgen.exe:
  -bpath string
        Background Image Path
  -fcolor string
        Font Color Code (default "#000000")
  -fpath string
        Font Path
  -fsize float
        Font Size (default 100)
  -lspace int
        Line Space
  -o string
        Output File Path (default "out.jpg")
  -smargin int
        Side Margin
  -text string
        Output Text
  -tmargin int
        Top Margin

未定義の引数を指定した場合も下記のようにエラーとなる。

flag provided but not defined: -fs
(以下略)

以上。