INDEX
constの概要
| 定数の定義と利用 Goの予約語 | ||
|
const 概要 |
||
|
基本的な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)
}
解説:
TypedIntはint型の定数として明示的に定義。UntypedIntは型を指定していないが、使用される場面に応じて型が決定される。
実行結果:
TypedInt: int UntypedInt: int
注意事項
- 定数は変更不可:
constで定義した値はプログラム実行中に変更できない。 - iotaを使うと自動で連番が付与される: 連続する値を持つ定数を定義するのに便利。
- 未使用の定数はエラーにならない: 変数と異なり、使われなくてもコンパイルエラーにはならない。
よくある質問
- Q: 定数を変更できますか?
- A: いいえ。
constで定義された値は変更できません。 - Q: 定数にスライスやマップを格納できますか?
- A: いいえ。定数として格納できるのは、基本型(数値、文字列、ブーリアン、rune)のみです。
- Q: iotaはどこで使うべきですか?
- A: 連番を自動で生成する場合や、ビットフラグを管理する際に便利です。
- Q: 文字列をiotaで増やせますか?
- A: いいえ。iotaは整数値を対象とした自動増加機能のため、文字列には適用できません。
まとめ
constを使うと、変更不可能な定数を定義できる。- 複数の定数は
const ( ... )ブロックで整理できる。 iotaを使うと、連続した整数を簡単に定義できる。- 定数はコンパイル時に評価され、プログラム実行時には変更できない。