【学習golangシリーズ】iotaの不思議

iotaなるものを初めて知ったので、まとめてみた。
変数に連番を作る時にとても便利だし、固有の値を自動的に振り分けるのに便利。
詳細な仕様は公式リファレンスを参照のこと。

[amazonjs asin="B06XJ86BFZ" locale="JP" title="プログラミング経験者がGo言語を本格的に勉強する前に読むための本"]

コメントで動きを書いているので、説明は省略。

package main

import (
    "fmt"
)

func main(){

    /* 0から始まり、自動的にインクリメントされる */
    const (
        a = iota // 0
        b = iota // 1
        c = iota // 2
    )

    fmt.Println(a,b,c)
    // 0 1 2

    /* 0から始まり、iotaを明示しなくても自動的にインクリメントされる */
    const (
        d = iota // 0
        e // 1
        f// 2
        g // 3
        h // 4
        i // 5
        j // 6
        k // 7

    )

    fmt.Println(d,e,f,g,h,i,j,k)
    // 0 1 2 3 4 5 6 7

    /*
    これが不思議。
    途中で代入しても無視されずに内部的にインクリメントされて、
    次にiotaを明示したときには順番にインクリメントされた結果
    が代入される。
    */
    const (
        l = iota // 0
        m = 100  // 100
        n = iota // 2
        o = 200  // 200
        p = iota// 4
        q = 300 // 300
        r // 300
        s = iota // 7
        t // 8
    )

    fmt.Println(l,m,n,o,p,q,r,s,t)
    // 0 100 2 200 4 300 300 7 8
}