[インデックス 19629] ファイルの概要
このコミットは、Go言語の標準ライブラリであるflag
パッケージにおいて、Duration
型のフラグに関するドキュメントコメントを改善するものです。具体的には、DurationVar
およびDuration
関数が受け入れる時間文字列のフォーマットについて、time.ParseDuration
関数が受け入れる形式であることを明示する記述が追加されました。これにより、ユーザーがこれらのフラグを使用する際に、どのような形式で時間を指定すればよいか、より分かりやすくなりました。
コミット
flag: add a little more doc comment to Duration.
The only text that describes the accepted format is in the package doc,
which is far away from these functions. The other flag types don't need
this explicitness because they are more obvious.
LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/101550043
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/dd3856e1b0d9250f4625108b9979d09ab48175e4
元コミット内容
commit dd3856e1b0d9250f4625108b9979d09ab48175e4
Author: David Symonds <dsymonds@golang.org>
Date: Sat Jun 28 20:47:06 2014 +1000
flag: add a little more doc comment to Duration.
The only text that describes the accepted format is in the package doc,
which is far away from these functions. The other flag types don't need
this explicitness because they are more obvious.
LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/101550043
---\n src/pkg/flag/flag.go | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/src/pkg/flag/flag.go b/src/pkg/flag/flag.go
index cd2a165be1..5797cc79d4 100644
--- a/src/pkg/flag/flag.go
+++ b/src/pkg/flag/flag.go
@@ -628,18 +628,21 @@ func Float64(name string, value float64, usage string) *float64 {
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
f.Var(newDurationValue(value, p), name, usage)
}
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
CommandLine.Var(newDurationValue(value, p), name, usage)
}
// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {
p := new(time.Duration)
f.DurationVar(p, name, value, usage)
@@ -648,6 +651,7 @@ func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time
// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func Duration(name string, value time.Duration, usage string) *time.Duration {
return CommandLine.Duration(name, value, usage)
}
変更の背景
Go言語のflag
パッケージは、コマンドライン引数をパースするための標準的な方法を提供します。time.Duration
型のフラグは、時間間隔を指定するために使用されます。しかし、このコミット以前は、DurationVar
やDuration
といった関数自体のドキュメントコメントには、ユーザーがどのような形式で時間文字列を指定すべきかについての明確な記述がありませんでした。
時間文字列の許容されるフォーマットに関する情報は、flag
パッケージ全体のドキュメントに記載されていましたが、これは個々の関数から「遠く離れた」場所にありました。つまり、開発者が特定のDuration
フラグの挙動を理解しようとした際に、関連する情報を見つけるためにパッケージ全体のドキュメントを参照する必要があり、利便性が低い状態でした。
他の基本的なフラグ型(例:int
, string
, bool
など)は、その入力形式が直感的で自明であるため、個別の関数レベルでの詳細な説明は不要でした。しかし、time.Duration
は"1h30m"や"5s"のような特定のフォーマットを要求するため、その入力規則を明示することがユーザーエクスペリエンスの向上に繋がると判断されました。
この変更は、ドキュメントの可読性とアクセシビリティを向上させ、開発者がflag
パッケージをより効率的に利用できるようにすることを目的としています。
前提知識の解説
このコミットを理解するためには、以下のGo言語の概念と標準ライブラリの知識が必要です。
1. Go言語のflag
パッケージ
flag
パッケージは、Goプログラムがコマンドライン引数をパースするための機能を提供します。これにより、ユーザーはプログラムの実行時に設定値を柔軟に変更できます。
- フラグの定義:
flag.StringVar
,flag.IntVar
,flag.BoolVar
などの関数を使って、変数にコマンドライン引数の値をバインドします。 - フラグのパース:
flag.Parse()
を呼び出すことで、定義されたフラグにコマンドライン引数の値が設定されます。 FlagSet
: 複数のフラグセットを管理するための構造体です。CommandLine
はデフォルトのFlagSet
です。
2. Go言語のtime
パッケージとtime.Duration
型
time
パッケージは、時間に関する機能を提供します。
time.Duration
型: 期間(時間の長さ)を表す型です。int64
のエイリアスであり、ナノ秒単位で時間を保持します。time.ParseDuration
関数: 文字列からtime.Duration
値をパースするための関数です。この関数は、"ns", "us" (または "µs"), "ms", "s", "m", "h" の単位を持つ数値のシーケンスを受け入れます。例えば、"300ms", "1.5h", "2h45m"などが有効な形式です。
3. ドキュメントコメント (Doc Comments)
Go言語では、関数、変数、型、パッケージなどの宣言の直前に記述されたコメントがドキュメントコメントとして扱われます。go doc
コマンドやGoの公式ドキュメントサイトで表示され、コードの利用者にその機能や使い方を説明するために非常に重要です。良いドキュメントコメントは、コードの可読性と保守性を高めます。
4. LGTM
(Looks Good To Me) と R
(Reviewer)
Goプロジェクトのコードレビュープロセスで使われる慣習的なタグです。
LGTM
: レビュー担当者がコード変更を承認したことを示します。R
: レビュー担当者を示します。
5. golang.org/cl/
Goプロジェクトの変更は、Gerritというコードレビューシステムを通じて管理されます。golang.org/cl/
は、Gerrit上の変更リスト(Change List)へのリンクを示します。このリンクは、コミットがマージされる前のレビュープロセスや議論の履歴を追跡するために使用されます。
技術的詳細
このコミットの技術的な変更は非常にシンプルで、既存の関数のドキュメントコメントに一行追加するだけです。しかし、その影響はユーザーエクスペリエンスの向上という点で重要です。
変更が加えられたのは、src/pkg/flag/flag.go
ファイル内の以下の4つの関数です。
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration
func Duration(name string, value time.Duration, usage string) *time.Duration
これらの関数は、それぞれtime.Duration
型のフラグを定義するためのものです。DurationVar
は既存のtime.Duration
変数にフラグの値を格納し、Duration
は新しいtime.Duration
変数を返します。また、それぞれFlagSet
のメソッド版と、デフォルトのCommandLine
を使用するパッケージレベルの関数版があります。
追加されたドキュメントコメントは、// The flag accepts a value acceptable to time.ParseDuration.
です。この一文により、これらのフラグが受け入れる時間文字列の形式が、time.ParseDuration
関数が解釈できる形式であることを明確に示しています。
これにより、開発者はflag
パッケージのドキュメントを参照する際に、Duration
フラグの入力形式についてすぐに理解できるようになります。例えば、go doc flag.Duration
やgo doc flag.DurationVar
を実行すると、この新しい情報が表示されるようになります。これは、特にGo言語の初心者や、time.ParseDuration
の具体的なフォーマットを覚えていない開発者にとって非常に役立ちます。
コアとなるコードの変更箇所
変更はsrc/pkg/flag/flag.go
ファイルに集中しており、以下の4箇所に新しい行が追加されています。
--- a/src/pkg/flag/flag.go
+++ b/src/pkg/flag/flag.go
@@ -628,18 +628,21 @@ func Float64(name string, value float64, usage string) *float64 {
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
f.Var(newDurationValue(value, p), name, usage)
}
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
CommandLine.Var(newDurationValue(value, p), name, usage)
}
// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {
p := new(time.Duration)
f.DurationVar(p, name, value, usage)
@@ -648,6 +651,7 @@ func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time
// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func Duration(name string, value time.Duration, usage string) *time.Duration {
return CommandLine.Duration(name, value, usage)
}
コアとなるコードの解説
追加された行はすべて、既存のドキュメントコメントの直後、かつ関数のシグネチャの直前に挿入されています。
例えば、FlagSet.DurationVar
関数の変更を見てみましょう。
変更前:
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
f.Var(newDurationValue(value, p), name, usage)
}
変更後:
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
f.Var(newDurationValue(value, p), name, usage)
}
追加された行 // The flag accepts a value acceptable to time.ParseDuration.
は、このフラグがコマンドラインから受け取る値の形式が、time.ParseDuration
関数によって正常にパースできる形式である必要があることを明確に示しています。これにより、ユーザーは"1h30m"や"5s"のような文字列が有効であり、"1 hour 30 minutes"のような自然言語の記述は無効であることを直感的に理解できます。
同様の変更が、flag
パッケージ内の他の3つのDuration
関連関数にも適用されています。これにより、flag
パッケージ全体でDuration
型のフラグの挙動に関するドキュメントの一貫性と完全性が向上しました。
この変更は、コードの振る舞いを変更するものではなく、純粋にドキュメントの改善です。しかし、ドキュメントはライブラリの使いやすさに直結するため、このような小さな改善もGo言語のユーザーエクスペリエンス向上に大きく貢献します。
関連リンク
- Go
flag
package documentation: https://pkg.go.dev/flag - Go
time
package documentation: https://pkg.go.dev/time time.ParseDuration
function documentation: https://pkg.go.dev/time#ParseDuration- Go Gerrit Change-Id: https://golang.org/cl/101550043
参考にした情報源リンク
- 上記の関連リンクに記載されているGo言語の公式ドキュメント。
- コミットメッセージと差分情報。
- Go言語のコードレビュー慣習に関する一般的な知識。
time.ParseDuration
の挙動に関する一般的なGo言語の知識。flag
パッケージの利用方法に関する一般的なGo言語の知識。 I have generated the detailed technical explanation in Markdown format, following all the specified instructions and chapter structure. I have included the commit message, diff, background, prerequisite knowledge, technical details, core code changes, and relevant links. I have also used web search to gather additional context for the background and prerequisite knowledge sections.
The output is ready to be printed to standard output.
# [インデックス 19629] ファイルの概要
このコミットは、Go言語の標準ライブラリである`flag`パッケージにおいて、`Duration`型のフラグに関するドキュメントコメントを改善するものです。具体的には、`DurationVar`および`Duration`関数が受け入れる時間文字列のフォーマットについて、`time.ParseDuration`関数が受け入れる形式であることを明示する記述が追加されました。これにより、ユーザーがこれらのフラグを使用する際に、どのような形式で時間を指定すればよいか、より分かりやすくなりました。
## コミット
flag: add a little more doc comment to Duration.
The only text that describes the accepted format is in the package doc, which is far away from these functions. The other flag types don't need this explicitness because they are more obvious.
LGTM=r R=r CC=golang-codereviews https://golang.org/cl/101550043
## GitHub上でのコミットページへのリンク
[https://github.com/golang/go/commit/dd3856e1b0d9250f4625108b9979d09ab48175e4](https://github.com/golang/go/commit/dd3856e1b0d9250f4625108b9979d09ab48175e4)
## 元コミット内容
commit dd3856e1b0d9250f4625108b9979d09ab48175e4 Author: David Symonds dsymonds@golang.org Date: Sat Jun 28 20:47:06 2014 +1000
flag: add a little more doc comment to Duration.
The only text that describes the accepted format is in the package doc,
which is far away from these functions. The other flag types don't need
this explicitness because they are more obvious.
LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/101550043
src/pkg/flag/flag.go | 4 ++++\n 1 file changed, 4 insertions(+)\n diff --git a/src/pkg/flag/flag.go b/src/pkg/flag/flag.go index cd2a165be1..5797cc79d4 100644 --- a/src/pkg/flag/flag.go +++ b/src/pkg/flag/flag.go @@ -628,18 +628,21 @@ func Float64(name string, value float64, usage string) *float64 {
// DurationVar defines a time.Duration flag with specified name, default value, and usage string. // The argument p points to a time.Duration variable in which to store the value of the flag. +// The flag accepts a value acceptable to time.ParseDuration. func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) { f.Var(newDurationValue(value, p), name, usage) }
// DurationVar defines a time.Duration flag with specified name, default value, and usage string. // The argument p points to a time.Duration variable in which to store the value of the flag. +// The flag accepts a value acceptable to time.ParseDuration. func DurationVar(p *time.Duration, name string, value time.Duration, usage string) { CommandLine.Var(newDurationValue(value, p), name, usage) }
// Duration defines a time.Duration flag with specified name, default value, and usage string. // The return value is the address of a time.Duration variable that stores the value of the flag. +// The flag accepts a value acceptable to time.ParseDuration. func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration { p := new(time.Duration) f.DurationVar(p, name, value, usage) @@ -648,6 +651,7 @@ func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time
// Duration defines a time.Duration flag with specified name, default value, and usage string. // The return value is the address of a time.Duration variable that stores the value of the flag. +// The flag accepts a value acceptable to time.ParseDuration. func Duration(name string, value time.Duration, usage string) *time.Duration { return CommandLine.Duration(name, value, usage) }
## 変更の背景
Go言語の`flag`パッケージは、コマンドライン引数をパースするための標準的な方法を提供します。`time.Duration`型のフラグは、時間間隔を指定するために使用されます。しかし、このコミット以前は、`DurationVar`や`Duration`といった関数自体のドキュメントコメントには、ユーザーがどのような形式で時間文字列を指定すべきかについての明確な記述がありませんでした。
時間文字列の許容されるフォーマットに関する情報は、`flag`パッケージ全体のドキュメントに記載されていましたが、これは個々の関数から「遠く離れた」場所にありました。つまり、開発者が特定の`Duration`フラグの挙動を理解しようとした際に、関連する情報を見つけるためにパッケージ全体のドキュメントを参照する必要があり、利便性が低い状態でした。
他の基本的なフラグ型(例:`int`, `string`, `bool`など)は、その入力形式が直感的で自明であるため、個別の関数レベルでの詳細な説明は不要でした。しかし、`time.Duration`は"1h30m"や"5s"のような特定のフォーマットを要求するため、その入力規則を明示することがユーザーエクスペリエンスの向上に繋がると判断されました。
この変更は、ドキュメントの可読性とアクセシビリティを向上させ、開発者が`flag`パッケージをより効率的に利用できるようにすることを目的としています。
## 前提知識の解説
このコミットを理解するためには、以下のGo言語の概念と標準ライブラリの知識が必要です。
### 1. Go言語の`flag`パッケージ
`flag`パッケージは、Goプログラムがコマンドライン引数をパースするための機能を提供します。これにより、ユーザーはプログラムの実行時に設定値を柔軟に変更できます。
- **フラグの定義**: `flag.StringVar`, `flag.IntVar`, `flag.BoolVar`などの関数を使って、変数にコマンドライン引数の値をバインドします。
- **フラグのパース**: `flag.Parse()`を呼び出すことで、定義されたフラグにコマンドライン引数の値が設定されます。
- **`FlagSet`**: 複数のフラグセットを管理するための構造体です。`CommandLine`はデフォルトの`FlagSet`です。
### 2. Go言語の`time`パッケージと`time.Duration`型
`time`パッケージは、時間に関する機能を提供します。
- **`time.Duration`型**: 期間(時間の長さ)を表す型です。`int64`のエイリアスであり、ナノ秒単位で時間を保持します。
- **`time.ParseDuration`関数**: 文字列から`time.Duration`値をパースするための関数です。この関数は、"ns", "us" (または "µs"), "ms", "s", "m", "h" の単位を持つ数値のシーケンスを受け入れます。例えば、"300ms", "1.5h", "2h45m"などが有効な形式です。
### 3. ドキュメントコメント (Doc Comments)
Go言語では、関数、変数、型、パッケージなどの宣言の直前に記述されたコメントがドキュメントコメントとして扱われます。`go doc`コマンドやGoの公式ドキュメントサイトで表示され、コードの利用者にその機能や使い方を説明するために非常に重要です。良いドキュメントコメントは、コードの可読性と保守性を高めます。
### 4. `LGTM` (Looks Good To Me) と `R` (Reviewer)
Goプロジェクトのコードレビュープロセスで使われる慣習的なタグです。
- `LGTM`: レビュー担当者がコード変更を承認したことを示します。
- `R`: レビュー担当者を示します。
### 5. `golang.org/cl/`
Goプロジェクトの変更は、Gerritというコードレビューシステムを通じて管理されます。`golang.org/cl/`は、Gerrit上の変更リスト(Change List)へのリンクを示します。このリンクは、コミットがマージされる前のレビュープロセスや議論の履歴を追跡するために使用されます。
## 技術的詳細
このコミットの技術的な変更は非常にシンプルで、既存の関数のドキュメントコメントに一行追加するだけです。しかし、その影響はユーザーエクスペリエンスの向上という点で重要です。
変更が加えられたのは、`src/pkg/flag/flag.go`ファイル内の以下の4つの関数です。
1. `func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)`
2. `func DurationVar(p *time.Duration, name string, value time.Duration, usage string)`
3. `func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration`
4. `func Duration(name string, value time.Duration, usage string) *time.Duration`
これらの関数は、それぞれ`time.Duration`型のフラグを定義するためのものです。`DurationVar`は既存の`time.Duration`変数にフラグの値を格納し、`Duration`は新しい`time.Duration`変数を返します。また、それぞれ`FlagSet`のメソッド版と、デフォルトの`CommandLine`を使用するパッケージレベルの関数版があります。
追加されたドキュメントコメントは、`// The flag accepts a value acceptable to time.ParseDuration.` です。この一文により、これらのフラグが受け入れる時間文字列の形式が、`time.ParseDuration`関数が解釈できる形式であることを明確に示しています。
これにより、開発者は`flag`パッケージのドキュメントを参照する際に、`Duration`フラグの入力形式についてすぐに理解できるようになります。例えば、`go doc flag.Duration`や`go doc flag.DurationVar`を実行すると、この新しい情報が表示されるようになります。これは、特にGo言語の初心者や、`time.ParseDuration`の具体的なフォーマットを覚えていない開発者にとって非常に役立ちます。
## コアとなるコードの変更箇所
変更は`src/pkg/flag/flag.go`ファイルに集中しており、以下の4箇所に新しい行が追加されています。
```diff
--- a/src/pkg/flag/flag.go
+++ b/src/pkg/flag/flag.go
@@ -628,18 +628,21 @@ func Float64(name string, value float64, usage string) *float64 {
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
f.Var(newDurationValue(value, p), name, usage)
}
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
CommandLine.Var(newDurationValue(value, p), name, usage)
}
// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {
p := new(time.Duration)
f.DurationVar(p, name, value, usage)
@@ -648,6 +651,7 @@ func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time
// Duration defines a time.Duration flag with specified name, default value, and usage string.
// The return value is the address of a time.Duration variable that stores the value of the flag.
+// The flag accepts a value acceptable to time.ParseDuration.
func Duration(name string, value time.Duration, usage string) *time.Duration {
return CommandLine.Duration(name, value, usage)
}
コアとなるコードの解説
追加された行はすべて、既存のドキュメントコメントの直後、かつ関数のシグネチャの直前に挿入されています。
例えば、FlagSet.DurationVar
関数の変更を見てみましょう。
変更前:
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
f.Var(newDurationValue(value, p), name, usage)
}
変更後:
// DurationVar defines a time.Duration flag with specified name, default value, and usage string.
// The argument p points to a time.Duration variable in which to store the value of the flag.
// The flag accepts a value acceptable to time.ParseDuration.
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
f.Var(newDurationValue(value, p), name, usage)
}
追加された行 // The flag accepts a value acceptable to time.ParseDuration.
は、このフラグがコマンドラインから受け取る値の形式が、time.ParseDuration
関数によって正常にパースできる形式である必要があることを明確に示しています。これにより、ユーザーは"1h30m"や"5s"のような文字列が有効であり、"1 hour 30 minutes"のような自然言語の記述は無効であることを直感的に理解できます。
同様の変更が、flag
パッケージ内の他の3つのDuration
関連関数にも適用されています。これにより、flag
パッケージ全体でDuration
型のフラグの挙動に関するドキュメントの一貫性と完全性が向上しました。
この変更は、コードの振る舞いを変更するものではなく、純粋にドキュメントの改善です。しかし、ドキュメントはライブラリの使いやすさに直結するため、このような小さな改善もGo言語のユーザーエクスペリエンス向上に大きく貢献します。
関連リンク
- Go
flag
package documentation: https://pkg.go.dev/flag - Go
time
package documentation: https://pkg.go.dev/time time.ParseDuration
function documentation: https://pkg.go.dev/time#ParseDuration- Go Gerrit Change-Id: https://golang.org/cl/101550043
参考にした情報源リンク
- 上記の関連リンクに記載されているGo言語の公式ドキュメント。
- コミットメッセージと差分情報。
- Go言語のコードレビュー慣習に関する一般的な知識。
time.ParseDuration
の挙動に関する一般的なGo言語の知識。flag
パッケージの利用方法に関する一般的なGo言語の知識。