関連記事
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
の付与が必要との記載があったのですが、私の環境だと環境変数を付与しなくても動いてくれました。
参考情報
Goのおすすめ書籍
上の書籍の日本語版が下です。
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。