ゼロ値を理解するニアh、初期化を理解しなくてはいけません。そのために、宣言と割り当てについて復習しましょう。
package main
import (
"fmt"
)
var z int // 型intの変数を宣言
func main() {
z = 21 // 変数に型を割り当て
fmt.Println(z)
}
型とともに変数を__宣言__し、ふさわしい__型__の値を__割り当て__ています。
初期化とは_変数に値を割り当てる最初のときのこと_です。つまり、割り当てのことを初期化とも呼べるでしょう。
初期化: プログラミングにおいて、初期化とはデータオブジェクトや変数に最初の値を割り当てることを言う。
変数に値を割り当てる最初のときです。コンピュータのあれそれはメモリに保存されています。コンピュータにはメモリがあり、メモリとは大きな郵便箱を備えた郵便局のようなものです。私書箱にはそれぞれ住所があり、それぞれにあれそれを保存できます。
メモリに値を保存する時のことを初期化といいます。
変数を宣言して値を割り当てないときに値を出力してみましょう。
package main
import (
"fmt"
)
var z int // 型intの変数を宣言
func main() {
fmt.Println(z)
}
0
Goのどの型にもゼロ値があります。ある型で変数を宣言して初期値を割り当てないとき、コンパイラはゼロ値を割り当てます。int
のときは0
、float
のときは0.0
、string
のときは空文字、bool
のときはfalse
、ポインタ、関数、インターフェイス、スライス、チャネル、マップのときはnil
です。
公式のdocumentation for zero valueでは、「変数のためのストレージが確保されたとき、宣言されたときでもnew
が呼び出されたときも、もしくは複合リテラルかmake
が呼び出されたときも、明白な初期化がなければ変数にはデフォルト値が割り当てられます」とあります。
ストレージ(メモリ)が確保された時、そして__明白な初期化がないとき__…つまり、変数を宣言しても値を割り当てないときはゼロ値が割り当てられます。