golang 定数/constの使い方と注意点について解説
今回はgolangの定数/constについて解説していきます。
定数/constとは
定数/constは不変の値を表すために使用され、基本的には一度設定されるとその値を変更することができません。
定数を宣言する際はconstを使用します。
constの使い方
定数は以下ののように宣言を行います。
const A = 3
Aという名前の定数を宣言し、値3を割り当てています。
以降、この定数Aの値は実行中に変更することができません。
constは複数の定位数をまとめて宣言することもできます。
const (
StatusOK = 200
StatusBadRequest = 400
StatusNotFound = 404
)
HTTPステータスコードのように複数の定数を定義したい場合は、上記コードのように書くことができます。
また、Go言語においては「型付き定数」と「型なし定数」の二種類があります。
型付き定数は以下のように型と定数名を明示的に宣言します。
const P float64 = 3.14
型なし定数は以下のように型宣言せずに定義します。
const P = 3.14
この定数はfloat64型でもfloat32型でもint型でもなく、使用されるまで具体的な型を持ちません。
iota
Go言語にはiotaという特殊な定数があります。
iotaはconstブロック内で自動的に初期化され、各定数宣言で1ずつ増加させることができる識別子です。
const (
C0 = iota // 0
C1 = iota // 1
C2 = iota // 2
)
または以下のようにもう少し簡潔に書くこともできます。
const (
C0 = iota // 0
C1 // 1
C2 // 2
)
iotaでは定数に連続した整数値を自動的に割り当てることができるため、列挙型を表現する際に便利な識別子です。
golangの案件を探すならクラウドワークス テック
constの注意点
定数の評価タイミング
変数は実行時に評価されますが、定位数はコンパイル時に評価されます。また定数には計算可能な式を定義することもできます、この計算処理もコンパイル時に行われるということになります。
const P = 3.14
const HalfP = Pi / 2
上記コードの場合はHalfPはコンパイル時に3.14 / 2と評価されるため、変数で計算処理を行うよりもパフォーマンスが向上することがあります。
iotaのスコープ
iotaはconstブロック内でのみ有効で、新しいconstブロックが始まるとリセットされてしまうため注意が必要です。
const (
A = iota // 0
B // 1
)
const (
C = iota // 0
D // 1
)
上記コードのように新しくconstブロックを始めると、iotaがリセットされます。
定数は変更できない
定数の値を変更しようとするとコンパイルエラーになります。
const MyConst = 100
MyConst = 200
golangをもっと詳しくなりたい方に
初めてのGo言語
Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。
詳解Go言語Webアプリケーション開発
こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。
以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。