1.2 定数の使い方

Goの定数は、他の言語とは少し趣が異なります。種類の異なる数値型の演算を許さない厳格さがGoの特徴ですが、定数は柔軟です。あいまいな解釈を許さない厳格なルールと使い勝手の良さを両立しています。

1.2.1 型のない定数を定義する

Goでは変数や引数などに代入して利用する値のことを、まとめて定数と呼びます。リテラルと呼ばれるものとほぼイコールです。定数同士の演算も可能です。この演算はコンパイル時に静的に行われます。コンパイル時に実行されるということは、実行ファイルが生成されるときにはすでに答えが計算されていてバイナリに埋め込まれた状態になります。実行時の計算コストはゼロです。代入されたり、型が指定されるまでは型が決定されず、数値型であれば値の範囲に限界はありません1

	var a = 1       // イコールの右側の1が定数
	var b = 1 + 100 // 定数の中で演算子を使った計算も可能

型を付与せずにconstキーワードを使うと、定数に名前をつけられます。名前の後ろに型名をつけるとその型に束縛されますが、つけなければ「定数」のままで、型がありません。

const (
	a = 1              // イコールの右側の1が定数
	b = 1 + 2          // 演算もできる
	c = 9223372036854775807 + 1 // uint64を超える数値も定義可能
	d = "hello world"  // 整数以外に、浮動小数点数や文字列やブール型も扱える
	e = iota + 10      // const宣言でのみiotaも使える
)

定数をvarに割り当てたり、関数の引数として渡すこともできます。このときに型が指定されていなければ、それぞれの定数のデフォルトとなる型( ...