Go で列挙型を表現する慣用的な方法は何ですか? 質問する

Go で列挙型を表現する慣用的な方法は何ですか? 質問する

私は、それぞれが 1 つのみになる N 個の塩基で構成される簡略化された染色体を表現しようとしています{A, C, T, G}

列挙型を使用して制約を形式化したいのですが、Go で列挙型をエミュレートする最も慣用的な方法は何か疑問に思っています。

ベストアンサー1

言語仕様からの引用:イオタ

定数宣言内では、事前宣言された識別子 iota は、連続する型なし整数定数を表します。これは、ソースに予約語 const が出現するたびに 0 にリセットされ、各 ConstSpec の後に増加します。これを使用して、関連する定数のセットを構築できます。

const (  // iota is reset to 0
        c0 = iota  // c0 == 0
        c1 = iota  // c1 == 1
        c2 = iota  // c2 == 2
)

const (
        a = 1 << iota  // a == 1 (iota has been reset)
        b = 1 << iota  // b == 2
        c = 1 << iota  // c == 4
)

const (
        u         = iota * 42  // u == 0     (untyped integer constant)
        v float64 = iota * 42  // v == 42.0  (float64 constant)
        w         = iota * 42  // w == 84    (untyped integer constant)
)

const x = iota  // x == 0 (iota has been reset)
const y = iota  // y == 0 (iota has been reset)

ExpressionList 内では、各 iota の値は各 ConstSpec の後にのみ増分されるため同じです。

const (
        bit0, mask0 = 1 << iota, 1<<iota - 1  // bit0 == 1, mask0 == 0
        bit1, mask1                           // bit1 == 2, mask1 == 1
        _, _                                  // skips iota == 2
        bit3, mask3                           // bit3 == 8, mask3 == 7
)

この最後の例では、最後の空でない式リストの暗黙的な繰り返しを利用しています。


コードは次のようになります

const (
        A = iota
        C
        T
        G
)

または

type Base int

const (
        A Base = iota
        C
        T
        G
)

基数を int とは別の型にしたい場合。

おすすめ記事