Upgrade to Pro — share decks privately, control downloads, hide ads and more …

5分で完全理解するGoのiota

uji
May 14, 2022

 5分で完全理解するGoのiota

uji

May 14, 2022
Tweet

More Decks by uji

Other Decks in Technology

Transcript

  1. • 定義は定数, コンパイル時に値が決まる
 Definition is constant, value determined at compile

    time.
 • ConstDecl中のConstSpecのindex値が入る
 The index value of ConstSpec in ConstDecl is entered.
 
 
 
 
 カウントアップしているわけではない
 iota Specification
 ConstDecl
 ConstSpec

  2. iota + 1
 
 
 
 
 
 
 ゼロ値の変数が意図せず分類されてしまうのを防ぐ


    Prevent unintentional classification of zero-valued variables
 Tips

  3. 1 << iota
 
 
 
 
 
 複数の状態を一つ値で表現したいときに効果的
 This

    is effective when you want to express multiple states with a single value.
 Tips

  4. Tips
 ビット積(AND)で権限 チェック
 
 AND can be used to check

    authority.
 https://go.dev/play/p/3Aub3AACmco

  5. 「数値に意味がある」定数 Constants with meaningful numerical values
 e.g.
 ・Exit Code
 ・DBに定義された値

    Value defined in DB
 コードの差分に数値の変更が表れないため意図しない数値の変更に 気付きにくい
 Difficult to notice unintended numerical changes because numerical changes are not represented in the code differences.
 Iotaを使わない方が良い場面
 Situations where iota should not be used.

  6. Goチームは一般的な列挙型は解決したい課題に
 対して仕様が複雑すぎると考えている
 The Go team believes that general enums are

    too complex a specification for the problem they want to solve.
 
 Go2に向けて今も議論されている
 Still being discussed for Go2.
 https://github.com/golang/go/issues/28987
 Why not Enum?

  7. • iotaはGoの連番定数生成の仕組み
 iota is Go's sequential constant generation mechanism
 •

    iotaはconst宣言のindex値として扱われる
 iota is treated as an index value of const declaration
 • iota + 1でゼロ値による意図しない挙動を防げる
 `iota +1` to prevent unintended behavior due to zero values.
 • 1 << iotaで単一の値で複雑な状態も表現できる
 Complex states can be represented with a single value in `1 << iota`
 
 Summary