
2026/08/20 3:33
Go 1.27
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Go チームはバイナリアーカイブと公式インストーラーを提供するとともに、言語仕様とツールングにおいて重要な進歩をもたらすバージョン 1.27 をリリースしました。主要な言語更新には、ジェネリックメソッド(例:
math/rand/v2.Rand)、ネスト化済みまたは埋め込まれた構造体に対する直接フィールド選択、および汎用化された関数型推論が含まれます。ツールングの向上としては、go fix における 4 つの新しいモダナイザー(atomictypes、embedlit、slicesbackward、unsafefuncs)、go doc でのパッケージ@バージョン照会への対応、ならびに go.mod において統合されたブロックによる依存関係管理の簡素化が挙げられます。パフォーマンス向上は、サイズ特化型メモリアロケーションの導入により実現されており、これによって小規模オブジェクト(<80B)のコストを最大 30% 削減し、アロケーション負荷の高いプログラムの全体的なパフォーマンス向上を約 1% に貢献しています。セキュリティ面では、量子耐性のある ML-DSA 署名の統合と標準ライブラリ内蔵の UUID サポートによる強化が図られました。その他のハイライトとしては、実験的な SIMD サポート、安定性を高めるための一般利用可能な goroutineleak プロファイラー、encoding/json/v2 の厳格なデフォルト設定、ならびにテスト用として新しいユーティリティである NewTestServer などがあります。本文
Go 1.27 リリースのお知らせ
Go チームからGo 1.27のリリースを正式に発表します。バイナリアーカイブやインストーラーのダウンロードについては、公式ダウンロードページをご覧ください。
Go 1.27 は、言語仕様、ツールチェーン、ランタイム、標準ライブラリにおいて大幅な進化をもたらします。主な更新ポイントは以下の通りです。
🌟 言語仕様の変更点
Go 1.27 では、言語仕様に以下の3 つの重要な更新が導入されました。
ジェネリックメソッド
- 非型指定引数のジェネリックメソッドに対するサポートを開始しました。
- これにより、各タイプごとに個別のメソッドを追加する必要がなくなり、コードの簡素化と再利用性が高まります。
- 以前:
に対してRand
,Int32N
,Int64N
など、各整数タイプに固有のメソッドが必要でした。IntN - 今: すべての整数タイプで動作する統一されたジェネリックメソッド
が利用可能になりました。N[Int IntType]
- 以前:
// 以前は各タイプごとに別々のメソッド定義が必要だった func (r *Rand) Int32N(n int32) int32 func (r *Rand) Int64N(n int64) int64 // Go 1.27 では、単一のジェネリックメソッドで対応可能 func (r *Rand) N[Int intType](n Int) Int
ストラクチャリテラルにおけるフィールドセレクター
- ストラクチャリテラル内のキーとして、埋め込まれたストラクチャの有効なフィールドセレクターを使用できるようになりました。
- これにより、ネストされたストラクチャや埋め込みストラクチャ内のフィールドを直接初期化することが可能になります。
type Habitat struct { Burrow string } type Gopher struct { Name string Habitat // 埋め込まれたストラクチャ } // Go 1.27 では、ネストされたフィールド (Burrow) を直接指定可能 g := Gopher{ Name: "Gopher", Burrow: "Burrow #42", // ここに直接設定可能 }
汎用化された関数タイプの推論
- 関数のタイプ推論があらゆる代入文脈において適用されるよう汎用化されました。
- これにより、明示的なタイプ引数を介さずに、以下のような複雑な文脈でもジェネリック関数を利用できます:
- 複合リテラル
- タイプ変換
- チャンネル送信 (Channel sends)
func GenericFormatter[T any](v T) string { return fmt.Sprintf("value: %v", v) } type IntFormatter func(int) string // 明示的な型引数を省略して直接使用可能 formatters := []IntFormatter{GenericFormatter} fn := IntFormatter(GenericFormatter) ch := make(chan IntFormatter, 1) ch <- GenericFormatter // 自動で T = int と推論されます
🛠️ ツールチェーンの更新
開発ツールの機能も強化されました。主な更新は以下の通りです。
の拡張: 新しいモダンライザー(go fix
,atomictypes
,embedlit
,slicesbackward
)が追加され、より多くの非推奨パターンを修正できるようになりました。unsafefuncs
のクエリ機能: パッケージ名とバージョンを組み合わせた指定(例:go doc
)をサポートするようになりました。example.com/pkg@v1.2.3
の構造最適化:go mod tidy
ファイル内の複数のgo.mod
ブロックを自動的に検出し、標準的な「直接的・間接的」の 2 つのブロック構造へ統合する機能を追加しました。require
⚡ パフォーマンスとランタイム
ランタイムの実装により、以下のようなパフォーマンス改善が実現されました。
- サイズ特化型のメモリアロケーション最適化
- オブジェクトサイズが小さい(<80 バイト)ものへのメモリアロケーションコストを最大30% 削減。
- メモリアロケーションに偏りのあるプログラムの全体的なパフォーマンスを約1% 向上。
- ゴルーティンリーキプロファイルの一般公開
に含まれる「goroutine leak」プロファイルが正式に対応。runtime/pprof- 常時ブロックされたゴルーティンの自動検出が可能になりました。
📚 標準ライブラリへの追加
新しい機能やセキュリティ強化のために、以下のパッケージが追加または更新されました。
encoding/json/v2- より高レベルな JSON 処理を提供(設定可能なオプションと厳格なデフォルト値)。
- 低レベルなストリーミング処理には
を併用します。encoding/json/jsontext - 既存の
は非マーシャライジングの高速化を実現しつつ、後方互換性を維持しています。encoding/json
crypto/mldsa- 量子耐性のあるML-DSA 署名スキーム (FIPS 204) を実装。
およびcrypto/x509
に統合されています。crypto/tls
uuid- UUID の生成と解析に対するネイティブサポートを追加。
とsimdarch- 実験的なSIMD (Single Instruction, Multiple Data) サポートを提供(アーキテクチャ固有の実装あり)。
net/http/httptest
を追加し、NewTestServer
パッケージとの連携に適合したメモリ上の架空ネットワークを構築可能にしました。testing/synctest
より詳細な変更リストや情報については、Go 1.27 リリースノート をご参照ください。
今後数週間以内に、追加のブログ投稿を通じて Go 1.27 の各トピックについて詳しく解説予定です。
このリリースに向けてコードを改善し、バグを報告いただいた皆様には心より感謝申し上げます。問題を見つけた場合は、いつでもお気軽にご報告ください。
Go 1.27 のご活用をお楽しみください!