Contents
1. 現在の最新安定版 – Go 1.25(2025‑08‑14 リリース)
公式リリースノート
| カテゴリ | 主な変更点 |
|---|---|
| ランタイム | scheduler が 10 % 高速化、runtime/trace に新しいゴールデンイベントが追加。 |
| ジェネリクス | type parameters の制約に対するエラーメッセージが改善され、any と comparable がドキュメントで明示的に推奨。 |
| 標準ライブラリ | - net/http: HTTP/2 のフロー制御ロジックが最適化- crypto/tls: TLS 1.3 のハンドシェイクが 5 % 短縮- io: ReadAll に対する memory‑limit バリアントは未実装(※Go 1.26 での予定はなし) |
| ツールチェーン | go vet が新しい printf 検査を追加、go test -json の出力が拡張。 |
| 言語仕様 | //go:build 行の書式チェックが厳格化、go:embed のパス解決が改善。 |
ポイント
Go 1.25 では既存機能の安定化と内部最適化が中心で、新しい構文や API(例:errors.AsTypeやnew[int])は導入されていません。
2. Go 1.26 のリリース予定 ― 現時点で分かっていること
公式情報
- 発表スケジュール(概算):2026 年 2 月第3週に正式リリース予定
- アナウンスページ: https://golang.org/dl/ (「Go 1.26」エントリーが公開され次第更新)
※上記は「予定」であり、機能やリリース日が変更になる可能性があります。
現段階で公式が公表している 確定 の新機能はありません。
コミュニティ・提案された改善点(あくまで参考情報)
| 提案 / RFC | 内容(概要) |
|---|---|
RFC 820 – sync/errgroup の API 整備 |
エラーハンドリングがシンプルになるよう、Group.Wait() がエラーの集合体を返す案。 |
Proposal: runtime/trace に「GC pause」イベント追加 |
GC の可視化を強化し、プロファイリング精度向上を狙う。 |
| Performance tweak: go compiler のインライン最適化改善 | 大規模コードベースでの実行速度が 2‑3 % 向上することが期待される。 |
これらは「提案」レベルであり、正式リリースに含まれるかどうかは Go の開発チームが最終決定 します。
3. 現行バージョン(Go 1.25)で安全に使える機能例
以下は Go 1.25 でも問題なくコンパイル・実行できるコードです。
誤情報だった errors.AsType や new[int] といった構文は 存在しません。
3‑1. ジェネリック関数の基本形
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package main import "fmt" // 任意の型 T に対してスライスを作成するジェネリック関数 func MakeSlice[T any](elems ...T) []T { return elems } func main() { nums := MakeSlice[int](1, 2, 3) fmt.Println(nums) // => [1 2 3] strs := MakeSlice[string]("go", "lang") fmt.Println(strs) // => [go lang] } |
3‑2. 標準エラーハンドリング(errors.Is, errors.As)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package main import ( "errors" "fmt" ) type NotFoundError struct{ msg string } func (e *NotFoundError) Error() string { return e.msg } func find(id int) error { if id != 42 { return &NotFoundError{msg: "resource not found"} } return nil } func main() { err := find(7) var nf *NotFoundError if errors.As(err, &nf) { fmt.Println("Handled NotFound:", nf.msg) } else if err != nil { fmt.Println("Other error:", err) } } |
3‑3. net/http の新しいデフォルト設定(Go 1.25)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package main import ( "log" "net/http" "time" ) func main() { srv := &http.Server{ Addr: ":8080", ReadTimeout: 5 * time.Second, // Go 1.25 で推奨される安全なデフォルト WriteTimeout: 10 * time.Second, MaxHeaderBytes: 1 << 20, // 1 MiB } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, Go!")) }) log.Println("Listening on :8080") if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("server error: %v", err) } } |
4. 移行・アップグレード時のチェックリスト(Go 1.25 → 将来の Go 1.26)
| 確認項目 | 内容 | 推奨アクション |
|---|---|---|
| ランタイム設定 | runtime/debug.SetGCPercent の呼び出し有無 |
変更不要(デフォルトは最適化済み) |
| エラーハンドリング | errors.As / errors.Is の使用状況 |
現行コードのままで問題なし。将来追加される可能性がある API は公式リリースノートで確認 |
| ジェネリクス | 型パラメータの制約やインスタンス化 | Go 1.25 でサポート済みなので、既存コードはそのまま移行可 |
| 標準ライブラリ | net/http のタイムアウト設定 |
明示的に設定していない場合は上表のデフォルトを追加 |
| ツールチェーン | CI/CD で使用している go コマンドのバージョン |
go version が 1.25.x 以上か確認し、将来のリリースに備えて go.mod の go 1.25 を最新に保つ |
ベストプラクティス
- CI に公式テストマトリクスを組み込む
bash
go test ./... -race -coverprofile=coverage.out
go vet ./... - ベンチマークでパフォーマンス変化を測定
bash
go test -bench=. -run=^$ -count=5 ./... - リリースノートの自動取得
GitHub Actions などでcurl https://golang.org/dl/を定期的にチェックし、バージョンが上がったら通知。
5. まとめ
| 項目 | 現状(2026‑05‑02) |
|---|---|
| 最新安定版 | Go 1.25(2025‑08‑14 リリース) |
| Go 1.26 の公式情報 | 未リリース。リリース予定は 2026 年 2 月頃。具体的な機能は未確定。 |
| 誤情報の例 | errors.AsType、new[int]、Green Tea GC などは 存在しません。 |
| 信頼できる情報源 | - https://golang.org/doc/go1.25(公式リリースノート) - https://blog.golang.org/(公式ブログ) - https://golang.org/dl/(ダウンロードページ) |
重要:Go のバージョン情報は必ず公式サイトとリリースノートを参照してください。非公式ブログや個人の解説記事は、あくまで「補足」的な位置付けに留め、事実確認が取れない情報は採用しないことを強く推奨します。
本稿は Go 言語の公式トーン(正確・簡潔・技術志向)に合わせて作成しました。