定数
ブール定数、ルーン定数、整数定数、浮動小数点定数、複素数定数、および文字列定数があります。ルーン、整数、浮動小数点、および複素数定数は集合的に数値定数と呼ばれます。
定数値は、ルーン、整数、浮動小数点、虚数、または文字列リテラル、定数を表す識別子、定数式、定数結果を持つ変換、または定数引数に適用されたmin
やmax
などの一部の組み込み関数の結果値、特定の値に適用されたunsafe.Sizeof
、一部の式に適用されたcap
またはlen
、複素数定数に適用されたreal
とimag
、および数値定数に適用されたcomplex
によって表されます。ブール真理値は、事前宣言された定数true
とfalse
によって表されます。事前宣言された識別子iotaは整数定数を表します。
一般に、複素数定数は定数式の一形態であり、そのセクションで説明されています。
数値定数は任意精度の正確な値を表し、オーバーフローしません。したがって、IEEE 754の負のゼロ、無限大、および非数値(NaN)を表す定数はありません。
定数は型付きまたは型なしです。リテラル定数、true
、false
、iota
、および型なし定数オペランドのみを含む特定の定数式は型なしです。
定数には、定数宣言または変換によって明示的に型を与えるか、変数宣言や代入文で使用する場合、または式のオペランドとして使用する場合に暗黙的に型を与えることができます。定数値がそれぞれの型の値として表現できない場合はエラーです。型が型パラメータの場合、定数は型パラメータの非定数値に変換されます。
型なし定数にはデフォルト型があり、これは明示的な型が必要なコンテキストで定数が暗黙的に変換される型です。例えば、i := 0
のような明示的な型がない短い変数宣言などです。型なし定数のデフォルト型は、ブール、ルーン、整数、浮動小数点、複素数、または文字列定数かどうかに応じて、それぞれbool
、rune
、int
、float64
、complex128
、またはstring
です。
実装上の制限:言語では数値定数は任意の精度を持ちますが、コンパイラは制限された精度の内部表現を使用して実装する場合があります。とはいえ、すべての実装は以下の条件を満たす必要があります:
- 整数定数を少なくとも256ビットで表現すること。
- 浮動小数点定数(複素数定数の部分を含む)を少なくとも256ビットの仮数と少なくとも16ビットの符号付き二進指数で表現すること。
- 整数定数を正確に表現できない場合はエラーを出すこと。
- オーバーフローのために浮動小数点または複素数定数を表現できない場合はエラーを出すこと。
- 精度の制限のために浮動小数点または複素数定数を表現できない場合は、最も近い表現可能な定数に丸めること。
これらの要件はリテラル定数と定数式の評価結果の両方に適用されます。