いろいろ備忘録日記

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

Goメモ-377 (Go 1.22 リリース)

関連記事

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

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

Go 1.22 が 2024-02-07 にリリースされましたね。

いつものごとく、後から勉強するためのリソースをメモメモ。。。

go.dev

go.dev

go.dev

zenn.dev

future-architect.github.io

future-architect.github.io

future-architect.github.io

future-architect.github.io

future-architect.github.io

future-architect.github.io

future-architect.github.io

future-architect.github.io

qiita.com

emre-odabas.medium.com

methane.hatenablog.jp

golang.withcodeexample.com

forループの挙動変更

今回のリリースノートの中で、一番目を引くものがこれですね。

たまにやってしまいがちなミスが減ります。

リリースノートから引用。

Previously, the variables declared by a "for" loop were created once and updated by each iteration. In Go 1.22, each iteration of the loop creates new variables, to avoid accidental sharing bugs.

(以前は、"for "ループで宣言された変数は一度作成され、各反復で更新されていました。Go 1.22では、偶発的な共有バグを避けるため、ループの各反復で新しい変数が作成されます。)

ソースコード

package main

import (
    "log"
)

func init() {
    log.SetFlags(0)
}

func main() {
    type st struct {
        v int
    }

    items := []st{
        {v: 1},
        {v: 2},
        {v: 3},
    }

    for _, v := range items {
        log.Printf("%[1]v (%[1]p)", &v)
    }
}

go 1.21.6

$ go version
go version go1.21.6 linux/amd64

$ go run main.go
&{1} (0xc000094010)
&{2} (0xc000094010)
&{3} (0xc000094010)

go 1.22.0

$ go version
go version go1.22.0 linux/amd64

$ go run main.go
&{1} (0xc000012060)
&{2} (0xc000012078)
&{3} (0xc000012088)

参考情報

Goのおすすめ書籍

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


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

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