golangでenum

iotaを使うべき場面について

概要

  • iotaを使うべき場面についてのメモ

iotaとは

golang/goにおけるiotaの説明の通り。

意味のある値には使わない

it provides a generality beyond that of simple enumerations.

iotaは順番に依存した単純なincremental numberなので、列挙型として使うべきであり、数値自体に意味がある場合には利用するべきではない。

列挙型

enumと呼ばれ、関係するconstantを一つのtypeにまとめるものを指す。例えば下記のような場面で使われる。

  • Timezones: EST, CST…
  • T-shirt Sizes: Small, Medium, Large
  • Server Statuses: Unknown, Running, Stopped, Resumed

なぜenumが必要かというと、下記の利点が挙げられる。

  • 値をグループ化して、決められた値のみを期待できる
  • 一般的な振る舞いを共有出きる
  • 想定外の値の利用を制限できる
  • コードの可読性、保守性を向上する

0は使わない

golangでは初期宣言時にint型の場合は0が設定される。
そのため、0は使わない方がいい。

type Activity int  
const (  
    Sleeping = iota
    Walking
    Running
)
func main() {  
    var activity Activity
    // activity initialized to 
    // its zero-value of int
    // which is Sleeping
}

なので、iota + 1を使って置くか、unknownを利用すると良い。

iota + 1パターン

const (  
    Sleeping = iota + 1
    Walking
    Running
)

unknownパターン

const (  
    Unknown = iota
    Sleeping
    Walking
    Running
)