プログラミング
Go 1.27 リリース
要約
GoチームはGo 1.27をリリースしました。このバージョンでは、ジェネリックメソッド、構造体リテラルでのフィールドセレクタの直接使用、関数型推論の一般化といった言語仕様の重要な更新が含まれています。また、ツールチェーンの改善、パフォーマンス向上、標準ライブラリの新機能(エンコーディング/JSON/v2、ML-DSA署名スキーム、UUIDサポートなど)も追加されています。
全文翻訳
Go Blog
Go 1.27 リリース
Nicholas Husin、Goチームを代表して
2026年8月19日
本日、GoチームはGo 1.27のリリースを発表しました。バイナリアーカイブとインストーラーはダウンロードページで見つけることができます。Go 1.27は、言語、ツールチェーン、ランタイム、標準ライブラリ全体にわたる主要な機能強化をもたらします。以下に主なハイライトをいくつか紹介します。
言語の変更
Go 1.27では、言語仕様に3つの注目すべきアップデートが導入されました。第一に、ジェネリックメソッドがサポートされるようになりました。例えば、math/rand/v2.Randを見てみましょう。
// Go 1.27 より前は、各型に対してRandの個別のメソッドを追加する必要がありました。
// (符号なし整数メソッドは簡潔さのため省略)
func (r *Rand) Int32N(n int32) int32
func (r *Rand) Int64N(n int64) int64
func (r *Rand) IntN(n int) int
// 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",
}
最後に、関数型の推論がすべての代入コンテキストに適用されるように一般化されました。ジェネリック関数は、複合リテラル、型変換、チャネル送信において、明示的な型引数なしで使用できるようになりました。
func GenericFormatter[T any](v T) string {
return fmt.Sprintf("value: %v", v)
}
type IntFormatter func(int) string
// Go 1.27 では、複合リテラル、変換、チャネル送信で T = int が推論されます。
formatters := []IntFormatter{GenericFormatter}
fn := IntFormatter(GenericFormatter)
ch := make(chan IntFormatter, 1)
ch <- GenericFormatter
ツールの改善
go fix には、atomictypes、embedlit、slicesbackward、unsafefuncs といったいくつかの新しいモダナイザーが含まれています。go doc は、go doc example.com/pkg@v1.2.3 のような package@version クエリをサポートするようになりました。go mod tidy は、go.mod の複数の require ブロックを、標準的な direct と indirect の2つのブロック構造に自動的に統合するようになりました。
パフォーマンスとランタイム
サイズ特化型メモリ割り当ては、小さなオブジェクト(80B未満)の割り当てコストを最大30%削減し、割り当て負荷の高いプログラムの全体的なパフォーマンスを約1%向上させます。runtime/pprof の goroutineleak プロファイルが一般利用可能になり、永続的にブロックされたゴルーチンの自動検出が可能になりました。
標準ライブラリの追加
encoding/json/v2 は、設定可能なオプションとより厳格なデフォルトを備えた高レベルなJSON処理を提供し、低レベルストリーミング用の encoding/json/jsontext も提供します。既存の encoding/json パッケージは、v2 の実装によってバックエンドされ、アンマーシャリングが高速化され、後方互換性が維持されています。crypto/mldsa は、ポスト量子 ML-DSA 署名スキーム(FIPS 204)を実装し、crypto/x509 および crypto/tls に統合されています。uuid は、UUID の生成と解析のためのネイティブサポートを提供します。simd およびアーキテクチャ固有の simd/archsimd は、実験的な SIMD サポートを提供します。net/http/httptest に NewTestServer が追加され、testing/synctest パッケージで使用できるインメモリのフェイクネットワークが提供されます。
変更点と詳細の完全なリストについては、Go 1.27 リリースノートをお読みください。今後数週間にわたり、フォローアップブログ記事で Go 1.27 に関連するトピックをより詳細に解説します。後でまたチェックして、これらの記事をお読みください。コードの記述、バグの報告、実験的な機能の試用、リリース候補のテストなど、このリリースに貢献してくれたすべての人に感謝します。いつものように、問題に気づいた場合は、問題を報告してください。Go 1.27 を楽しんでいただければ幸いです。
前の記事: pkg.go.dev API の紹介
ブログインデックス