Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 11674] ファイルの概要

このコミットは、Go言語の標準ライブラリであるflagパッケージにおいて、Duration型のコマンドラインフラグが受け入れる入力形式に関する説明を追加するものです。これにより、flagパッケージのドキュメントがより明確になり、ユーザーがDurationフラグを正しく使用するための情報が提供されます。

コミット

commit 32ffc62348632898fa420aaea4f8b2f406979e7a
Author: David Symonds <dsymonds@golang.org>
Date:   Tue Feb 7 17:50:04 2012 +1100

    flag: describe valid input for Duration flags.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/5639046

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/32ffc62348632898fa420aaea4f8b2f406979e7a

元コミット内容

flag: describe valid input for Duration flags.

変更の背景

Go言語のflagパッケージは、コマンドライン引数をパースするための標準的な方法を提供します。様々な型のフラグ(整数、ブーリアンなど)がサポートされており、それぞれの型には特定の入力形式が期待されます。しかし、Duration型(時間間隔を表す型)のフラグについては、その入力形式に関する明確な説明がflagパッケージのドキュメントに不足していました。

このコミットの背景には、ユーザーがDurationフラグを使用する際に、どのような文字列形式が有効であるかを容易に理解できるようにするという目的があります。具体的には、time.ParseDuration関数が受け入れる形式がDurationフラグにも適用されることを明示することで、ドキュメントの網羅性と利便性を向上させています。これにより、開発者はDurationフラグの正しい使い方を迅速に把握できるようになります。

前提知識の解説

Go言語のflagパッケージ

flagパッケージは、Goプログラムがコマンドライン引数をパースするための機能を提供します。これにより、ユーザーはプログラムの実行時に設定をカスタマイズできます。例えば、-port=8080-timeout=30sのように、フラグ名と値を指定してプログラムの動作を変更できます。

flagパッケージの主な機能は以下の通りです。

  • フラグの定義: flag.String(), flag.Int(), flag.Bool(), flag.Duration()などの関数を使って、フラグの名前、デフォルト値、説明を定義します。
  • フラグのパース: flag.Parse()を呼び出すことで、定義されたフラグに基づいてコマンドライン引数を解析します。
  • フラグの値の取得: パース後、定義時に返されたポインタを介してフラグの値にアクセスできます。

time.ParseDuration関数

Go言語のtimeパッケージは、時間に関する様々な機能を提供します。その中でもtime.ParseDuration関数は、人間が読める形式の文字列(例: "300ms", "1.5h", "2h45m")をtime.Duration型に変換するために使用されます。

time.ParseDurationが受け入れる文字列の形式は以下の通りです。

  • 数値と単位の組み合わせ。
  • 単位は、"ns" (ナノ秒), "us" (マイクロ秒), "ms" (ミリ秒), "s" (秒), "m" (分), "h" (時間) などがサポートされます。
  • 複数の単位を組み合わせることも可能で、例えば "1h30m" は1時間30分を表します。
  • 負の値を指定することも可能です(例: "-5m")。

flagパッケージのDurationフラグは、内部的にこのtime.ParseDuration関数を使用して入力文字列を解析します。したがって、flag.Durationフラグに渡す文字列は、time.ParseDurationが理解できる形式である必要があります。

技術的詳細

このコミットは、src/pkg/flag/flag.goファイル内のドキュメント文字列に1行追加するだけの非常に小さな変更です。具体的には、flagパッケージのトップレベルのコメントブロック(通常、パッケージの概要や基本的な使用法を説明する部分)に、Durationフラグの入力形式に関する説明が追加されました。

変更前のドキュメントでは、整数型やブーリアン型のフラグが受け入れる入力形式については説明がありましたが、Duration型については言及がありませんでした。この変更により、Durationフラグがtime.ParseDuration関数によって解析される形式を受け入れることが明示され、ドキュメントの完全性が向上しました。

この変更はコードの動作に影響を与えるものではなく、純粋にドキュメントの改善を目的としています。しかし、ユーザーがflagパッケージのドキュメントを参照した際に、Durationフラグの正しい使用法をすぐに理解できるという点で、その影響は大きいです。

コアとなるコードの変更箇所

--- a/src/pkg/flag/flag.go
+++ b/src/pkg/flag/flag.go
@@ -49,6 +49,7 @@
 
 	Integer flags accept 1234, 0664, 0x1234 and may be negative.
 	Boolean flags may be 1, 0, t, f, true, false, TRUE, FALSE, True, False.
+	Duration flags accept any input valid for time.ParseDuration.
 
 	The default set of command-line flags is controlled by
 	top-level functions.  The FlagSet type allows one to define

コアとなるコードの解説

変更はsrc/pkg/flag/flag.goファイルの49行目付近に1行追加されただけです。

追加された行:

	Duration flags accept any input valid for time.ParseDuration.

この行は、flagパッケージのドキュメントコメントの一部として挿入されています。既存の「整数フラグは1234, 0664, 0x1234を受け入れ、負の値も可能である」や「ブーリアンフラグは1, 0, t, f, true, false, TRUE, FALSE, True, Falseを受け入れる」といった説明に続いて、Durationフラグに関する説明が追加されました。

この追加により、flagパッケージのユーザーは、Durationフラグにどのような文字列を渡せばよいか、つまりtime.ParseDuration関数が解析できる形式であれば何でも受け入れられるということが明確に理解できるようになります。これは、flagパッケージの使いやすさを向上させるための、シンプルながらも効果的なドキュメントの改善です。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント (flag および time パッケージ)
  • コミットハッシュ: 32ffc62348632898fa420aaea4f8b2f406979e7a のGitHubコミットページ
  • Goのコードレビューシステム (Gerrit) の変更リスト: https://golang.org/cl/5639046 (現在はGitHubに統合されているため、直接アクセスしてもリダイレクトされる可能性があります)