Go/0
表示
< Go
Goにおける 数値リテラル 0 は、その文脈によって複数の意味を持ちますが、「ゼロ値(zero value)」 としての役割が特に重要です。以下に具体的に解説します。
- 整数型・浮動小数点型の
0var i int = 0 // int型の0 var f float64 = 0 // float64型の0.0(整数リテラルだが浮動小数点型に代入可能)
- Goでは、
0は 型推論 によってint型として扱われますが、他の数値型(float64、byteなど)にも代入可能です。
Goでは、変数を宣言した時点で暗黙的に初期化される値 を「ゼロ値」と呼びます。0 は数値型のゼロ値です。
型ごとのゼロ値
[編集]| 型 | ゼロ値 |
|---|---|
int, float32, float64
|
0
|
bool
|
false
|
string
|
""(空文字)
|
| ポインタ | nil
|
| スライス/マップ | nil
|
| 構造体 | 各フィールドのゼロ値 |
例: ゼロ値の自動初期化
[編集]var n int // n == 0 var s string // s == "" var p *int // p == nil
(1) スライスの初期化
[編集]s := make([]int, 0) // 長さ0のスライス(要素はないがnilではない)
nilスライスと空スライスは異なりますが、len(s) == 0は共通。
(2) マップの要素チェック
[編集]m := map[string]int{"a": 1} val, exists := m["b"] // val == 0(ゼロ値), exists == false
- キーが存在しない場合、値型のゼロ値(ここでは
0)が返されます。
(3) カウンタやフラグの初期値
[編集]count := 0 // カウンタ初期化
4. 他の言語との比較
[編集]- C言語:
0はint型だが、ポインタのNULLやfalseと同等に扱われる(暗黙的な型変換あり)。 - Python:
0はint型で、NoneやFalseとは明確に区別される。 - Go:
0はあくまで数値型のゼロ値で、nil(ポインタ/参照型)やfalseとは独立。
5. 注意点
[編集]ゼロ値の意図しない利用
[編集]var timeout time.Duration // timeout == 0(0ナノ秒)
time.Durationの0は「無期限」を意味する場合があり、バグの原因になることがあります。
var zero float64 = 0 fmt.Println(1.0 / zero) // +Inf(0除算はエラーではなく無限大)
6. まとめ
[編集]- Goの
0は 「数値型のゼロ値」 であり、言語設計の「明示性」と「安全性」を体現しています。 - 変数の自動初期化やエッジケース(マップのキー不在など)で重要な役割を果たします。
- 他の言語と異なり、
nilやfalseとは厳密に区別されるため、型システムの堅牢性に貢献しています。
「0 はただの数値ではなく、Goの 『ゼロ値哲学』の象徴」と考えると、言語設計の深みが見えてきます!