標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

次期Goの汎用for range。他力本願でほんのちょっとだけ試してみた

zenn.dev に

という記事があったので、試してみた。同記事にある手順:

go install golang.org/dl/gotip@latest
gotip download 510541

は特に問題なく完了した。ダウンロードはさほどの時間はかからなかったが、その後のライブラリのビルドはそこそこの時間と CPU の負荷をとられた。

Windowsの場合、gotipは %USERPROFILE%\go\bin に、コンパイラのその他のファイルセットは %USERPROFILE%\sdk\gotip にインストールされている。

実験1

単純なカウントループ

package main

func main(){
    for i := range 5 {
        println(i)
    }
}
$ GOEXPERIMENT=range gotip run count.go
0
1
2
3
4

よしよし

bash や nyagosでは上記のとおり 一時的に設定する変数名=値 コマンド 引数 という構文が使えるが、CMD.EXE などでは set "GOEXPERIMENT=range" && gotip run count.go` といった形に直す必要がある。

実験2

Python の enumrate みたいに、シーケンスに通し番号をつける iterator

package main

func enumerate(list ...string) func(func(key int, value string) bool) {
    return func(callback func(key int, value string) bool) {
        for i, v := range list {
            if !callback(i, v) {
                break
            }
        }
    }
}

func main() {
    for i, v := range enumerate("a", "b", "c", "d") {
        println(i, v)
    }
}
$ GOEXPERIMENT=range gotip run f.go
0 a
1 b
2 c
3 d

予想外にアッサリ動いたので、少々驚いた。 Luaiterator より、ちょっとだけ難度高いね

一年くらいは待たされそうな雰囲気だけど、リリースを楽しみに待つとしよう