TL;DR
Go で、明示的に初期化しなかった変数や値に入る、型ごとのデフォルトの値。数値は 0、文字列は ""、真偽値は false、ポインタやスライスなどは nil になる。
仕組み
Go の言語仕様では、宣言や new で変数の領域を確保したとき、または複合リテラルや make で新しい値を作ったときに、初期値を与えなければ各要素が型のゼロ値になる。型ごとのゼロ値は次のとおりである。
この初期化は再帰的に行われるので、構造体の配列なら、各要素のフィールドもゼロ値になる。
例
言語仕様の例では、次の 2 つの宣言は同じ意味になる。
var i int
var i int = 0構造体を new や var で作ると、すべてのフィールドがゼロ値になる。
type T struct { i int; f float64; next *T }
t := new(T) // t.i == 0, t.f == 0.0, t.next == nil注意点
初めてのGo言語 第3章によると、マップのゼロ値は nil で、nil マップに書き込むと panic になる。一方、存在しないキーを読むと値の型のゼロ値が返る。
encoding/json/v2 の発表によると、encoding/json の v1 では、マップやスライスのゼロ値は JSON の null になる。v2 では、ゼロ値のフィールドを省略する omitzero が使える。