【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の値がわかりづらくなることもあるのでコメントで値の意図を残すのがよいかも
  • あくまでコンパイル時定数のみに使える(動的な値には使えない)
GitHubで編集を提案

Discussion