変数

変数はを保持するためのストレージの場所です。許容される値の集合は変数の**によって決定されます。

変数宣言、または関数パラメータと結果については、関数宣言関数リテラルのシグネチャが名前付き変数のストレージを確保します。組み込み関数newを呼び出すか、複合リテラルのアドレスを取ることで、実行時に変数のストレージを割り当てます。このような匿名変数は(暗黙的な場合もある)ポインタ間接参照を介して参照されます。

配列スライス、および構造体型の構造化変数には、個別にアドレス指定できる要素とフィールドがあります。このような各要素は変数のように動作します。

変数の静的型(または単に)は、その宣言で与えられた型、new呼び出しまたは複合リテラルで提供された型、または構造化変数の要素の型です。インターフェース型の変数には、実行時に変数に割り当てられた値の型(非インターフェース型)である動的型もあります(値が型を持たない事前宣言された識別子nilでない限り)。動的型は実行中に変化する場合がありますが、インターフェース変数に格納される値は常に変数の静的型に代入可能です。

var x interface{}  // xはnilで静的型はinterface{}
var v *T           // vは値nilで静的型は*T
x = 42             // xは値42で動的型はint
x = v              // xは値(*T)(nil)で動的型は*T

変数の値は、で変数を参照することによって取得されます。それは変数に代入された最新の値です。変数にまだ値が代入されていない場合、その値はその型のゼロ値です。