Go言語のconstを使って定数を定義し、利用する方法についてわかりやすく解説

スポンサーリンク
スポンサーリンク

constの概要

定数の定義と利用 Goの予約語

const

概要constは、変更不可能な定数を定義するために使用されるキーワードです。定数はプログラムの実行時に変更されることはありません。

  • 定数はコンパイル時に評価され、実行中に変更できない。
  • 数値、文字列、ブーリアン、文字(rune)などを定数として定義できる。
  • 型を指定しない場合、暗黙的な型推論が適用される。

基本的なconstの使い方

constを使って文字列や数値の定数を定義する基本的な例です。

package main

import "fmt"

const Pi = 3.14159
const Greeting = "こんにちは"

func main() {
    fmt.Println("円周率:", Pi)
    fmt.Println("挨拶:", Greeting)
}

解説:

  • const Pi = 3.14159 のように、数学的な定数を定義できます。
  • const Greeting = "こんにちは" のように、文字列も定数として定義できます。

実行結果:

円周率: 3.14159
挨拶: こんにちは

複数の定数をまとめて定義

定数はconstブロックを使ってまとめて定義できます。

package main

import "fmt"

const (
    AppName  = "MyApp"
    Version  = "1.0.0"
    Debug    = true
)

func main() {
    fmt.Println("アプリ名:", AppName)
    fmt.Println("バージョン:", Version)
    fmt.Println("デバッグモード:", Debug)
}

解説:

  • const ( ... ) を使うと、複数の定数を整理して定義できる。
  • ブーリアン型の定数(true/false)も定義可能。

実行結果:

アプリ名: MyApp
バージョン: 1.0.0
デバッグモード: true

iotaを使った連続した定数の定義

iotaを使うと、0から始まる連番の定数を簡単に定義できます。

package main

import "fmt"

const (
    A = iota // 0
    B        // 1
    C        // 2
)

func main() {
    fmt.Println(A, B, C)
}

解説:

  • iotaは定数の宣言時に0から始まる連番を生成する仕組み。
  • 1つ目のiotaの値は0で、次の定数は1、2と自動的に増加する。

実行結果:

0 1 2

iotaを応用したビットフラグの定義

ビットシフトと組み合わせて、フラグのような値を定義することもできます。

package main

import "fmt"

const (
    Read    = 1 << iota // 1 (0001)
    Write              // 2 (0010)
    Execute            // 4 (0100)
)

func main() {
    fmt.Println("Read:", Read)
    fmt.Println("Write:", Write)
    fmt.Println("Execute:", Execute)
}

解説:

  • 1 << iotaを使うと、ビット単位で値を増加させられる。
  • この方式はアクセス権限やフラグの管理などに使われる。

実行結果:

Read: 1
Write: 2
Execute: 4

型指定された定数と未指定の定数

定数には型を明示することもできますが、未指定の場合はコンパイラが適切な型を推測します。

package main

import "fmt"

const (
    TypedInt   int = 42
    UntypedInt     = 42
)

func main() {
    fmt.Printf("TypedInt: %T\n", TypedInt)
    fmt.Printf("UntypedInt: %T\n", UntypedInt)
}

解説:

  • TypedIntint型の定数として明示的に定義。
  • UntypedInt は型を指定していないが、使用される場面に応じて型が決定される。

実行結果:

TypedInt: int
UntypedInt: int

注意事項

  • 定数は変更不可: constで定義した値はプログラム実行中に変更できない。
  • iotaを使うと自動で連番が付与される: 連続する値を持つ定数を定義するのに便利。
  • 未使用の定数はエラーにならない: 変数と異なり、使われなくてもコンパイルエラーにはならない。

よくある質問

Q: 定数を変更できますか?
A: いいえ。constで定義された値は変更できません。
Q: 定数にスライスやマップを格納できますか?
A: いいえ。定数として格納できるのは、基本型(数値、文字列、ブーリアン、rune)のみです。
Q: iotaはどこで使うべきですか?
A: 連番を自動で生成する場合や、ビットフラグを管理する際に便利です。
Q: 文字列をiotaで増やせますか?
A: いいえ。iotaは整数値を対象とした自動増加機能のため、文字列には適用できません。

まとめ

  • constを使うと、変更不可能な定数を定義できる。
  • 複数の定数はconst ( ... )ブロックで整理できる。
  • iotaを使うと、連続した整数を簡単に定義できる。
  • 定数はコンパイル時に評価され、プログラム実行時には変更できない。