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

[インデックス 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型のフラグは、時間間隔を指定するために使用されます。しかし、このコミット以前は、DurationVarDurationといった関数自体のドキュメントコメントには、ユーザーがどのような形式で時間文字列を指定すべきかについての明確な記述がありませんでした。

時間文字列の許容されるフォーマットに関する情報は、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.Durationgo 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言語の公式ドキュメント。
  • コミットメッセージと差分情報。
  • 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言語の公式ドキュメント。
  • コミットメッセージと差分情報。
  • Go言語のコードレビュー慣習に関する一般的な知識。
  • time.ParseDurationの挙動に関する一般的なGo言語の知識。
  • flagパッケージの利用方法に関する一般的なGo言語の知識。