Go 言語の定数

Go の定数

Go で定数を宣言するには、 const キーワードを使います。

const 定数名 = 定数値

定数はある特定の値の別名として使えます。一度宣言した定数に他の値を割り当てようとしても、コンパイル時にエラーとして検出されます。

次の例では定数 M10 という値として宣言しています。

const M = 10

これに他の値を代入しようと試みても、コンパイル時にエラーとして検出されます。

const M = 10
M = 123 // エラー
// cannot assign to M (declared const)

この形式で宣言する定数には、型は決められていません。次のように、 intfloat64 といった異なるデータ型の変数に代入できます。

package main

import "fmt"

func main() {
	const M = 10

	var i int = M // int に代入
	var x float64 = M // float64 に代入
	fmt.Printf("%v [%T]\n", i, i) // 10 [int]
	fmt.Printf("%v [%T]\n", x, x) // 10 [float64]
}

複数の定数を宣言する場合には、次のようにひとつの const キーワードと () でまとめて記載することができます。

const (
	M = 10
	N = 123
)

Go の型付き定数

上で説明した形式の定数は「型無し定数」 (untyped constant) といいます。

一方、Go では型付き定数 (typed constant) も宣言することができます。型付き定数は次の形式で宣言します。

const 定数名 データ型 = 定数値

型付きの定数は、変数に代入する際に型のチェックが行われます。

次の例では int 型で宣言した定数 Mfloat64 型の変数に代入を試みていますが、コンパイル時にエラーが発生します。

const M int = 10
var i int = M // これは OK
var x float64 = M // エラー
// cannot use M (type int) as type float64 in assignment

この int 型の定数 M を float64 型の変数に代入するには、明示的なキャストが必要です。

var x float64 = float64(M)

Go の定数へ値を自動的に割当てる iota

定数に値を割り振るときに、連番を割り当てたい場合は iota を利用すると便利です。 iota を定数の宣言時に使うと、0 から順番に自動的に数値の連番を割り当てます

次の例では定数 northsoutheastwest を宣言していますが、 north の宣言に iota を割当てることで、それに続く定数に連番を割り当てています。

package main

import "fmt"

const (
	north = iota
	south
	east
	west
)

func main() {
	fmt.Printf("%v %v %v %v\n", north, south, east, west)
	// 0 1 2 3
}

この例では northから数値の 0、1、2、3 が割り当てられていることがわかります。

もし、10 番から順に 10、11、12、13 と割り当てたい場合は、次のように iota + 10 を先頭の値として割り当てます。

const (
	north = iota + 10
	south
	east
	west
)

func main() {
	fmt.Printf("%v %v %v %v\n", north, south, east, west)
	// 10 11 12 13
}

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Go 言語入門