✨
【Go】iotaの使い方メモ
概要
- Goのiotaは定数の連番を簡単に定義できる機能
- 実務で目にしたことがあるパターンのメモ
iotaについて
- Goの
iota
は、constブロックの中で連番の定数を簡単に定義できる予約語 - 通常、0から始まり、1ずつインクリメントされる
const (
A = iota // 0
B // 1
C // 2
)
状態や種別の識別子
- 状態管理が数字ベースで統一でき、定義もすっきりする
type UserStatus int
const (
StatusActive UserStatus = iota
StatusSuspended
StatusDeactivated
)
フラグのビット値管理(ビットマスク)
- 複数のフラグをビット単位でまとめて管理・判定できる
const (
FlagRead = 1 << iota // 1 << 0 → 0001
FlagWrite // 1 << 1 → 0010
FlagDelete // 1 << 2 → 0100
)
func hasPermission(flags, permission int) bool {
return flags&permission != 0
}
エラーコード番号の整理
- エラーコードの先頭値を固定しつつ、連番管理が簡単にできる
type ErrorCode int
const (
ErrNotFound ErrorCode = iota + 1000 // 1000
ErrInvalidRequest // 1001
ErrPermissionDenied // 1002
)
iota利用時の注意したいこと
- constブロックごとにリセットされる
- 式が複雑になると、iotaの値がわかりづらくなることもあるのでコメントで値の意図を残すのがよいかも
- あくまでコンパイル時定数のみに使える(動的な値には使えない)
Discussion