コンテンツにスキップ

Go/宣言済定数

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Go


Goにおける宣言済定数(Predeclared constants)は、パッケージをインポートすることなく、プログラムのどこからでも参照できる特別な定数です。

これらは大きく分けて、真偽値数値生成用、そしてゼロ値(無)の3つのカテゴリーに分類されます。

1. 真偽値 (Boolean constants)

[編集]

論理演算や条件分岐で使用される、最も基本的な定数です。

  • true: 心理値の「真」を表します。
  • false: 心理値の「偽」を表します。

これらは bool 型の唯一の有効な値です。

2. 連続した数値の生成 (iota)

[編集]

iota は、const 宣言の中でのみ使用できる特殊な識別子です。

  • iota: 0から始まり、行が進むごとに1ずつ増加する型なし整数の定数です。
  • 列挙型(Enums)のような構造を定義する際に非常に便利です。
const (
    Apple  = iota // 0
    Banana = iota // 1
    Cherry = iota // 2
)

3. ポインタや参照型の空状態 (nil)

[編集]

nil は、変数が何も指していない、あるいは初期化されていない状態を表す定数です。

  • nil: ポインタ、インターフェース、マップ、スライス、チャネル、および関数型の「ゼロ値」として定義されています。
  • 注意: intstringbool などの基本データ型に nil を代入することはできません。これらにはそれぞれ独自のゼロ値(0, "", false)があります。

💡 重要な性質:型のない定数 (Untyped Constants)

[編集]

Goの宣言済定数(特に true, false, iota)は、「型のない(Untyped)」という性質を持っています。

これにより、コンテキストに応じて柔軟に異なる型として振る舞うことができます。例えば、const x = iota と書いたとき、この xint としても float64 としても、代入先の型に合わせて柔軟に適合します。

⚠️ 予約語との違い

[編集]

true, false, iota, nil は「宣言済識別子」であり、iffor のような「予約語(Keywords)」ではありません。

技術的にはこれらを別の意味で再定義(シャドウイング)することが可能ですが、コードの可読性を著しく損なうため、独自の変数名や定数名として使用することは絶対に避けるべきです。

// 悪い例:nilを別の値で上書き(非常に危険)
nil := "hello"