概要

次期バージョンとなるGo 1.27では、言語機能・標準ライブラリ・パフォーマンスの各面にわたる大型アップデートが予定されている。最大の目玉は、メソッド宣言が独自の型パラメータを持てるようになる「ジェネリックメソッド」の導入で、これまでパッケージレベルの関数に限定されていたジェネリック操作を、型に紐づくメソッドとして実装できるようになる。あわせて、FIPS 204準拠のポスト量子署名方式を実装する新パッケージ「crypto/mldsa」や、標準ライブラリのUUID生成パッケージ、そしてデフォルト化される新JSONエンジン「encoding/json/v2」など、多数の機能追加が見込まれている。

言語機能の拡張

ジェネリックメソッドに加えて、構造体リテラルのフィールドセレクタも改善され、埋め込み構造体の昇格フィールドを直接指定した記述(例: User{ID: 7, Name: "Mittens"})が可能になる。また関数型推論も一般化され、これまで変数代入時にしか省略できなかった型引数の明示が、型変換やコンポジットリテラルの文脈でも不要になる。これらはいずれも既存コードとの互換性を保ちながら、ジェネリクスまわりの記述をより自然にする改善だ。

セキュリティとJSONまわりの刷新

セキュリティ面では、FIPS 204で規定されたML-DSA方式を実装する「crypto/mldsa」パッケージが新たに追加され、MLDSA44・MLDSA65・MLDSA87の3つのパラメータセットに対応する。量子コンピュータによる暗号解読リスクへの備えとして、標準ライブラリレベルでポスト量子署名がサポートされる意義は大きい。JSON処理では、これまで実験的パッケージとして提供されていた「encoding/json/v2」がデフォルトの実装として採用される。v1との互換性を保ちつつ性能向上を図った設計で、GOEXPERIMENT=nojsonv2をビルド時に設定することで従来実装へのオプトアウトも可能とされている。このほか標準ライブラリには、RFC 9562準拠のUUID生成・解析を行う新パッケージや、区切り文字の最後の出現位置で分割するstrings/bytesCutLast関数も追加される見込みだ。

パフォーマンスとツールチェインの改善

パフォーマンス面では、サイズ特化型のメモリアロケータにより、80バイト以下の小さなオブジェクト割り当てで最大30%の高速化が見込まれるという。ただしバイナリサイズは約60KB増加するというトレードオフも伴う。また実験的な機能として、ハードウェアアクセラレーションを活用したベクトル演算を可能にするポータブルSIMDパッケージ「simd」も導入される。テスト関連では、合成時間上でのスリープとゴルーチン待機を同時に扱えるsynctest.Sleepや、実際のTCP接続を使わずインメモリでテストできるhttptest.NewTestServerが追加される。さらに、GC支援によるゴルーチンリーク検出プロファイルがデフォルトで有効化されるほか、トレースバックにpprofラベルが含まれるようになるなど、運用・デバッグ面の改善も多い。HTTP/2実装についても、これまで単一の1万2000行規模のファイルにまとまっていたコードが専用パッケージへと切り出される。

今後の見通し

Go 1.27は現時点でリリース候補段階にあり、言語仕様の拡張、量子耐性を見据えたセキュリティ強化、そしてパフォーマンス改善がバランスよく盛り込まれたリリースになる見通しだ。ジェネリックメソッドのような言語コア機能の追加は既存コードへの影響が大きいだけに、正式リリースまでの間、コミュニティによる検証やフィードバックが続くとみられる。