【golang】iotaの使い方

Go言語には、数値連続の自動生成を行うためのiotaというものがあります。

iotaの使い方

iotaは、列挙型の最初の要素に割り当てる数値を示すために使用されます。その後の要素は、iotaを使用して自動的に生成された数値に1を加算した値になります。

以下は、iotaを使用して列挙型を作成する簡単な例です。

package main

import "fmt"

func main() {
    const (
        A = iota
        B
        C
    )

    fmt.Println(A, B, C)
}

上記のコードを実行すると、次のような結果が表示されます。

0 1 2

この例では、A、B、Cの値がそれぞれiotaによって0、1、2に自動的に割り当てられました。この方法を使用すると、簡単に連続した定数値を作成できます。

値をスキップする

iotaを使用すると、値をスキップすることもできます。以下の例では、Bの値をスキップしてCに2を割り当てています。

package main

import "fmt"

func main() {
    const (
        A = iota
        _
        C = 2
    )

    fmt.Println(A, C)
}

上記のコードを実行すると、次のような結果が表示されます。

0 2

この例では、Bの値をスキップするためにアンダースコア(_)が使用されました。

自動リセット

iotaは、新しい定数ブロックに入るたびに自動的にリセットされます。以下の例では、2つの定数ブロックがありますが、それぞれでiotaがリセットされています。

package main

import "fmt"

func main() {
    const (
        A = iota
        B
        C
    )

    fmt.Println(A, B, C)

    const (
        D = iota
        E
        F
    )

    fmt.Println(D, E, F)
}

上記のコードを実行すると、次のような結果が表示されます。

0 1 2
0 1 2

この例では、最初の定数ブロックでA、B、Cの値が自動的に生成され、2番目の定数ブロックでD、E、Fの値が自動的に生成されます。各定数ブロックは、iotaがリセットされたことにより、独立して動作します。

iotaを使用したビット演算

iotaを使用して、ビット演算の定数値を作成することもできます。以下の例では、ビット演算のOR、AND、XORを定義しています。

package main

import "fmt"

func main() {
    const (
        READ = 1 << iota
        WRITE
        EXECUTE
    )

    accessModes := READ | WRITE

    fmt.Printf("%b\n", READ)
    fmt.Printf("%b\n", WRITE)
    fmt.Printf("%b\n", EXECUTE)
    fmt.Printf("%b\n", accessModes)
}

上記のコードを実行すると、次のような結果が表示されます。

1
10
100
11

この例では、iotaを使用してビット演算の定数値を作成しています。ビット演算OR、AND、XORは、それぞれ1ビット左にシフトすることで生成されています。そして、accessModes変数には、ビット演算ORを使用してREADとWRITEのアクセスモードを設定しています。

まとめ

iotaは、列挙型や定数のグループを作成する際に使用することができます。iotaを使用すると、数値を自動的に生成することができ、値をスキップすることもできます。また、iotaは定数ブロックごとに自動的にリセットされます。さらに、iotaを使用してビット演算の定数値を作成することもできます。