Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

定数 / iota

定数は変更できない値を定義するために使います。『iota』を使うと連番の定数を自動生成でき、列挙型のような使い方ができます。

構文
// 単一の定数
const 定数名 型 = 値
const 定数名 = 値 // 型推論

// 定数ブロック(iota が使える)
const (
	定数名1 = iota // 0
	定数名2        // 1
	定数名3        // 2
)

// iota を使った式
const (
	定数名1 = iota * 2 // 0
	定数名2             // 2
	定数名3             // 4
)
構文一覧
構文概要
const name = value型推論で定数を宣言します。数値・文字列・bool が使えます。
const name type = value型を明示して定数を宣言します。
const ( ... )複数の定数をまとめて宣言するブロックです。
iotaconstブロック内で使える連番生成器です。ブロックの先頭で0にリセットされ、1行ごとに1増えます。
_ = iotaアンダースコアで特定の値をスキップします。
1 << iotaビットシフトと組み合わせてフラグ定数を定義する慣用的な書き方です。
サンプルコード
package main

import "fmt"

// 単純な定数
const Pi = 3.14159
const AppName = "MyApp"

// iota を使った曜日定数
type Weekday int

const (
	Sunday Weekday = iota // 0
	Monday                // 1
	Tuesday               // 2
	Wednesday             // 3
	Thursday              // 4
	Friday                // 5
	Saturday              // 6
)

// ビットフラグ定数(1 << iota を使う)
const (
	Read    = 1 << iota // 1 (001)
	Write               // 2 (010)
	Execute             // 4 (100)
)

func main() {
	fmt.Println(Pi, AppName)
	fmt.Println(Sunday, Monday, Saturday) // 0 1 6

	// ビットフラグの組み合わせ
	perm := Read | Write // 3 (011)
	fmt.Printf("perm: %d\n", perm)
	fmt.Printf("Read権限あり: %v\n", perm&Read != 0)
	fmt.Printf("Execute権限あり: %v\n", perm&Execute != 0)
}
概要

定数はコンパイル時に値が確定するため、関数の戻り値や変数を定数に代入することはできません。使える値は数値リテラル・文字列・bool・その他の定数のみです。

『iota』はconstブロック内でのみ有効で、ブロックが始まるたびに0にリセットされます。各行で1ずつ増えるため、複雑な連番の定数も簡潔に記述できます。

型付き定数(『type Weekday int』のような独自型を使った定数)を活用すると、意図しない型の混在をコンパイルエラーで防ぐことができます。Goの基本データ型と組み合わせて積極的に活用しましょう。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。