Release

1.21.0

2023/8リリース

  • このマイナーバージョンから.0のパッチバージョンがつくようになった
  • buildin関数が増えるよ
    • min/max
    • clear
      mapがデカくなっちゃったままにはならんのかな
  • 型推論のパワーアップ
    • ジェネリックな関数の引数としてジェネリックな関数を渡した場合、型引数をわたさなくても関数側の引数の型から型推論されるようになった。
  • go:wasmimportディレクティブでWebAssemblyからインポートした関数をGoのプログラムで利用できるようになった
    • ようわからん
  • WASIの対応を実験的にはじめた
  • 1.20ではいったPGOがbuildコマンドのpgoフラグがデフォルトで-pgo=autoになった。
  • 追加された関数
    • log/slogパッケージ正式リリース
      • slogハンドラーのテスト用にtesting/slogtestが追加
    • スライスやマップの共通の関数をまとめたslices, mapsパッケージが追加
      • これがジェネリクスの賜物なんだな。
    • context
      • WithoutCancel:キャンセルされたコンテキストからキャンセル前のコンテキストのコピーを返す。WithValueとかしたやつもコピーされるのかな。
      • WithDeadlineCause/WithTimeoutCause:タイマー切れのときに原因を設定できるようになる。Cause関数で取得できる
      • AfterFunc:コンテキストがキャンセルされた後に実行する関数を登録できる
        • cleanup関数登録とかすんのかな

1.20

  • カバレッジのプロファイルをコンパイル後のバイナリの実行で取得できるようになった
    Coverage profiling support for integration tests - The Go Programming Language
    go build -coverでカバレッジのプロファイルを出力するバイナリにビルドできる。-covevrpkgフラグでカバレッジに含めるパッケージを指定できる。プロフィルが環境変数COVERDIRで指定されたディレクトリに出力される。環境変数COVERDIRのプロファイルを操作するgo tool covdataが追加
    • go tool covdata percent -i=somedataでカバレッジの割合が出力される
    • go tool covdata textfmt -i=somedata -o profile.txtgo testで生成されるプロファイルに変換
    • go tool covdata merge -i=windows_datadir,macos_datadir -o mergedで複数のOSで実行したプロファイルのマージができる
  • プロファイル誘導型最適化(PGO)
    Profile-guided optimization - The Go Programming Language
    CPU pprofファイルをコンパイラのフィードバックとして使用しコンパイラの最適化の決定(FDO)をおこないます。PGOを使用してビルドすると性能が2~4%程度の向上が期待できるコンパイル時のコードが取得したプロファイルのコードから変更されていた場合、変更箇所は最適化の影響をうけない。コンパイラはPGOビルドを繰り返しても最適化のばらつきを防ぐような保守的なつくりになっている。
    go build -pgo=autoでビルドするとdefault.pgoファイルを自動で選択してコンパイルします。go1.20ではデフォルトでgo build -pgo=off

1.19

1.18

1.17

  • slice型を配列のポインタにキャストできるようになった
    型変換でパニックを起こす可能性がある。
  • go.modに間接的に呼び出されるパッケージが含まれるようになった
    go get時とかにサブパッケージのgo.modまで読み込む必要がなくなったのかな
  • // +buildだったのが、他に合わせて//go:buildに変更された
  • go runでバージョンサフィックス付きで呼び出せるようになった
    go run example.com/hoge/cmd@v1.0.0
    ファイルをインストールしたり、go.modに変更を及ぼさずに使える
    • tools.goいらない子。
  • コンパイラが関数の引数にレジストリ使うようになって2%処理速度が向上
  • testing.Tとtesting.BにSetenvが追加
    テストに閉じた環境変数を設定できる