いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-454 (flagパッケージ再入門)(01-FlagSet)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

最近、flaggy とかを利用していて、あまりflagパッケージを触らなくなってきているのですが

小さなツールをちゃちゃっとワンタイムで利用するときは、やっぱり使ったりします。

使っていないと忘れてしまいそうなので、ここに自分の備忘録として残しておこうと思います。

今回は、flag.FlagSetについて。

FlagSetは、名前の通り、カスタムなフラグセットを作成することが出来る構造体です。

flagパッケージで、ユニットテストなどでも使いたい場合は FlagSetを利用すると便利です。

サンプル

package flags

import (
    "flag"

    "github.com/devlights/gomy/output"
)

// Flagset は、flag.Flagsetのサンプルです。
//
// 通常、flagパッケージはアプリケーションの引数を扱うものであるが
// flag.Flagsetを利用することで、外から引数を指定してパースすることが可能となる。
// ユニットテストと相性が良い。
//
// # REFERENCES
//   - https://pkg.go.dev/flag@go1.22.4#FlagSet
func Flagset() error {
    var (
        fs       = flag.NewFlagSet("", flag.ExitOnError)
        intValue = fs.Int("intvalue", 0, "int value")
        strValue = fs.String("strvalue", "", "string value")
    )

    // Flagsetは自分でParse()を呼ぶ必要がある
    // アプリケーション引数を渡す場合は os.Args[1:] となる
    fs.Parse([]string{"-intvalue", "100", "-stvalue", "hello world"})

    output.Stdoutl("[intValue]", *intValue)
    output.Stdoutl("[intValue]", *strValue)

    return nil

    /*
      $ task
      task: [build] go build .
      task: [run] ./try-golang -onetime

      ENTER EXAMPLE NAME: flags_flagset

      [Name] "flags_flagset"
      [intValue]           100
      [intValue]           hello world

      [Elapsed] 43.41µs
   */
}

参考情報

Goメモ-428 (flaggyメモ)(01) - いろいろ備忘録日記

Goメモ-429 (flaggyメモ)(02) - いろいろ備忘録日記

Goメモ-430 (flaggyメモ)(03) - いろいろ備忘録日記

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。