it.xnews.jp
出典: VictoriaMetrics 原文公開: 2026-07-31 生成: 2026-08-02 読了 約 5 分 model: claude-haiku-4-5 原文: https://victoriametrics.com/blog/go-1-27/index.html raw.md

Go 1.27 の主要な新機能と最適化を解説

TL;DR: Go 1.27 は 2026 年 7 月 31 日にリリース予定で、ジェネリックメソッド、構造体リテラルフィールドセレクタ、メモリ割り当て 30% の最適化、ポスト量子署名 crypto/mldsa、UUID パッケージ、JSON v2 の標準化など主要な機能追加と 1600 のコミット分の改善を含む。

Go 1.27 は大規模なアップデートをもたらす。ジェネリックメソッドは受け取り側の型と独立した独自の型パラメータを宣言でき、一般化された関数型推論は汎用関数が一致する関数型として用いられるコンテキスト(変換やコンポジットリテラル)で適用される。構造体リテラルフィールドセレクタは埋め込み構造体の昇格フィールドを埋め込み型を指定せずに直接利用可能にする。ただしジェネリックメソッドはインターフェース内で宣言したり、インターフェース満足に使用することはできない。

メモリ割り当ての大幅な最適化

コンパイラは 80 バイト未満の割り当てに対してサイズ専用メモリ割り当てルーチンへの呼び出しを生成するようになり、小さな割り当てのコスト削減は最大 30% に達する見込みである。この改善はバイナリサイズとしては 60 KB のトレードオフを伴うが、実際のメモリ割り当てが多いプログラムでは全体的に 1% 程度の利得が期待される。

ポスト量子署名とセキュリティ強化

新たに追加された crypto/mldsa パッケージは FIPS 204 で規定されるポスト量子デジタル署名方式 ML-DSA を実装する。MLDSA44、MLDSA65、MLDSA87 の 3 つのパラメータセットを備えており、MLDSA65 のシグネチャサイズは 3309 バイトである。並行して crypto/x509 は Windows と macOS 上で SSL_CERT_FILE と SSL_CERT_DIR を尊重するようになった。

標準ライブラリの追加と機能卒業

Go 1.27 は待望の UUID パッケージを標準ライブラリに統合し、RFC 9562 に従って UUID の生成とパースを暗号学的に安全な乱数ソースで実行する。encoding/json/v2 は GOEXPERIMENT=jsonv2 ビルドフラグなしで利用可能となり、従来の encoding/json(v1)は内部で v2 実装に支える一方、v2 はデフォルトではマップキーをソートしない。go.mod が Go 1.27 以降を設定するモジュールについては、トレースバックは runtime/pprof ゴルーチンラベルを含むようになる。Go 1.26 で実験的に導入されたゴルーチンリークディテクタは Go 1.27 で通常のプロファイルに昇格する。

その他の主要な改善

strings.CutLast と bytes.CutLast はセパレータの最後の出現周辺で分割する。hash/maphash パッケージは Hasher[T] インターフェースをゲインし、math/big.Int.Divide は明示的なラウンドモードで商と剰余を計算する。math/rand/v2 は (*Rand).N メソッドを追加し、カスタム Rand ソースから任意の整数型または duration 型の制限付き乱数を描画できる。testing/synctest は Sleep ヘルパーを追加し、合成クロックを進めてゴルーチンが落ち着くまで待機する。httptest.NewTestServer は実際の TCP リスナなしにメモリ内フェイクネットワークサーバを生成する。time チャネルは Go 1.23 のタイマー再設計以降、常にアンバッファ化された。http.Response.Body は HTTP/1 接続再利用を可能にするため Close で自動的にドレインされる。HTTP/2 サーバは RFC 9218 に従いクライアントの優先度を尊重する。Unicode バージョンは 15 から 17 へアップグレードされ、1600 のコミットが Go 1.26 と Go 1.27 の間にマージされた。

開発者ツールと言語ツールチェーン

go test は デフォルトで stdversion vet チェックを実行する。go doc は go doc pkg@version 構文で特定のモジュールバージョンの documentation をサポートし、-ex フラグでパッケージの実行可能な examples をリスト表示する。go fix は atomictypes、embedlit、slicesbackward、unsafefuncs の新しい modernizers アナライザーをゲインする。go mod tidy は go 1.27 以降のモジュール向け require ブロックを整理する。go tool trace -http=:6060 は localhost にバインドする。go コマンドは Bazaar(bzr)バージョン管理システムのサポートを廃止した。Response ファイル(@file)は compile、link、asm、cgo、cover、pack ツールでサポートされるようになった。

コンパイラと実行時の最適化

HTTP/2 は h2_bundle.go の単一ファイル(12226 行)から実際のパッケージ net/http/internal/http2 へ移行した。Go 1.27 は net/http に unexported pluggable HTTP/3 フックを追加し、将来の QUIC サポートに備える。既知ビット dataflow パス、ループ不変コード移動、switch ステートメント lookup テーブルコンパイレーションの 3 つの新しいコンパイラ最適化が導入される。Swiss Table map 実装はハッシュ関数を simd/archsimd intrinsic の上に再実装した。型記述子と itab は明示的アライメント付き dedicated .go.type セクションに移行した。reflect.typelinks はオフセットではなく型を返すようになり、新しい実験的な map メモリレイアウト GOEXPERIMENT=mapsplitgroup はインターリーブ(KVKVKVKV)から split キー/値配列(KKKKVVVV)へレイアウトを変更する。os.Root ReadDir と Readdir は root containment boundary をエスケープできる可能性がある。

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

VictoriaMetrics Go 1.27 interactive tour https://victoriametrics.com/blog/go-1-27/index.html

この記事をシェア