いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-368 (Go 1.22, Range over integers, for-rangeループの指定に数値が使えるようになる)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにとりあえずメモメモ。。。

Go 1.22 のドラフトリリースノートを見てたら、Range over integers という項目を発見。

for i := range 10 { } のように出来るみたいですね。

とりあえず、試してみる。

試してみる

gotipを使って確認します。

$ gotip download
Updating the go development tree...
remote: Finding sources: 100% (20165/20165)
remote: Total 20165 (delta 4739), reused 14473 (delta 4739)
Receiving objects: 100% (20165/20165), 44.73 MiB | 9.36 MiB/s, done.
Resolving deltas: 100% (4739/4739), done.
From https://go.googlesource.com/go
 * branch              master     -> FETCH_HEAD
   3754ca0a..b2dbfbfc  master     -> origin/master
Previous HEAD position was 3754ca0a cmd/compile: improve the implementation of Lowered{Move,Zero} on linux/loong64
HEAD is now at b2dbfbfc crypto/rsa,crypto/internal/bigmod: improve verify/encrypt performance
Building Go cmd/dist using /home/linuxbrew/.linuxbrew/Cellar/go/1.21.6/libexec. (go1.21.6 linux/amd64)
Building Go toolchain1 using /home/linuxbrew/.linuxbrew/Cellar/go/1.21.6/libexec.
Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
Building Go toolchain2 using go_bootstrap and Go toolchain1.
Building Go toolchain3 using go_bootstrap and Go toolchain2.
Building packages and commands for linux/amd64.
---
Success. You may now run 'gotip'!

$ gotip version
go version devel go1.22-b2dbfbfc Fri Jan 12 00:56:20 2024 +0000 linux/amd64

以下のようなプログラムを用意。

package main

import (
        "fmt"
)

func main() {
        var (
                count = 5
        )

        for i := range count {
                fmt.Printf("hello %d\n", i)
        }
}

実行してみます。

$ gotip run main.go
hello 0
hello 1
hello 2
hello 3
hello 4

おー。ちゃんとループしてくれますね。

ちなみに、Go 1.21 の方で実行すると

$ go version
go version go1.21.6 linux/amd64

$ go run main.go
# command-line-arguments
./main.go:8:17: cannot range over 5 (untyped int constant)

当然ですが、エラーとなります。

参考情報の記事を見ると、GOEXPERIMENT=rangefunc の付与が必要との記載があったのですが、私の環境だと環境変数を付与しなくても動いてくれました。

参考情報

antonz.org

Goのおすすめ書籍

上の書籍の日本語版が下です。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。