Go 1.25 リリースノート
Go 1.25 の紹介
Go の最新リリースであるバージョン 1.25 は、Go 1.24 の 6 ヶ月後の 2025 年 8 月に登場します。その変更点のほとんどは、ツールチェーン、ランタイム、およびライブラリの実装に関するものです。いつものように、このリリースは Go 1 の互換性の約束を維持しています。ほとんどすべての Go プログラムは、以前と同じようにコンパイルおよび実行されると予想しています。
言語の変更点
Go 1.25 では、Go プログラムに影響を与える言語の変更はありません。しかし、言語仕様では、専用の散文に代わってコア型の概念が削除されました。詳細については、関連するブログ記事を参照してください。
ツール
Go コマンド
go build の -asan オプションは、プログラム終了時のリーク検出がデフォルトになりました。これにより、C によって割り当てられたメモリが解放されず、C または Go のいずれかによって割り当てられた他のメモリによって参照されていない場合、エラーが報告されます。これらの新しいエラー報告は、プログラム実行時に環境変数 ASAN_OPTIONS=detect_leaks=0 を設定することで無効にできます。
Go ディストリビューションには、事前にビルドされたツールのバイナリが少なくなります。コンパイラやリンカーなどのコアツールチェーンのバイナリは引き続き含まれますが、ビルドまたはテスト操作によって呼び出されないツールは、必要に応じて go tool によってビルドおよび実行されます。
新しい go.mod の ignore ディレクティブを使用すると、go コマンドが無視すべきディレクトリを指定できます。これらのディレクトリとそのサブディレクトリ内のファイルは、all や ./... などのパッケージパターンと一致する場合、go コマンドによって無視されますが、モジュールの zip ファイルには引き続き含まれます。
新しい go doc の -http オプションは、要求されたオブジェクトのドキュメントを表示するドキュメンテーションサーバーを起動し、ブラウザウィンドウでドキュメントを開きます。
新しい go version -m -json オプションは、指定された Go バイナリファイルに埋め込まれた runtime/debug.BuildInfo 構造体の JSON エンコーディングを出力します。
go コマンドは、バージョン管理システム vcs を持つ repo-url の subdir に root-path が対応することを示すために、<meta name="go-import" content="root-path vcs repo-url subdir"> の構文を使用してモジュールパスを解決する際に、リポジトリのサブディレクトリをモジュールルートのパスとして使用することをサポートするようになりました。
新しい work パッケージパターンは、ワーク (以前はメインと呼ばれていた) モジュール内のすべてのパッケージに一致します。これは、モジュールモードの単一のワークモジュール、またはワークスペースモードのワークスペースモジュールのセットのいずれかです。
go コマンドが go.mod または go.work ファイルの go 行を更新するとき、コマンドの現在のバージョンを指定するツールチェーン行を追加しなくなりました。
Vet
go vet コマンドには新しいアナライザーが含まれています
- waitgroup は、
sync.WaitGroup.Addへの呼び出しの誤った配置を報告します。
- hostport は、IPv6 では機能しないため、
net.Dialのアドレスを構築するためにfmt.Sprintf("%s:%d", host, port)を使用していることを報告し、代わりにnet.JoinHostPortの使用を提案します。
ランタイム
コンテナ対応 GOMAXPROCS
GOMAXPROCS のデフォルトの動作が変更されました。Go の以前のバージョンでは、GOMAXPROCS は起動時に利用可能な論理 CPU の数 (runtime.NumCPU) にデフォルトで設定されていました。Go 1.25 では 2 つの変更が導入されました
-
Linux では、ランタイムはプロセスを含む cgroup の CPU 帯域幅制限 (存在する場合) を考慮します。CPU 帯域幅制限が利用可能な論理 CPU の数よりも低い場合、
GOMAXPROCSは低い制限にデフォルトで設定されます。Kubernetes のようなコンテナランタイムシステムでは、cgroup の CPU 帯域幅制限は通常「CPU リミット」オプションに対応します。Go ランタイムは「CPU リクエスト」オプションを考慮しません。 -
すべての OS で、利用可能な論理 CPU の数または cgroup の CPU 帯域幅制限が変更された場合、ランタイムは定期的に
GOMAXPROCSを更新します。
これらの動作は両方とも、GOMAXPROCS 環境変数または runtime.GOMAXPROCS への呼び出しによって GOMAXPROCS が手動で設定された場合、自動的に無効になります。また、GODEBUG 設定 containermaxprocs=0 と updatemaxprocs=0 をそれぞれ明示的に使用して無効にすることもできます。
更新された cgroup の制限を読み取るために、ランタイムはプロセスライフタイムの間、cgroup ファイルのキャッシュされたファイルディスクリプタを保持します。
新しい実験的なガベージコレクタ
新しいガベージコレクタが実験として利用可能になりました。このガベージコレクタの設計は、より良い局所性と CPU スケーラビリティによって、小さなオブジェクトのマーキングとスキャンングのパフォーマンスを向上させます。ベンチマーク結果は異なりますが、ガベージコレクタを多用する実世界のプログラムでは、ガベージコレクションのオーバーヘッドが 10〜40% 削減されると予想しています。
新しいガベージコレクタは、ビルド時に GOEXPERIMENT=greenteagc を設定することで有効にできます。この設計は今後も進化し改善されると予想しています。そのために、Go 開発者に試してみて、その経験を報告することを推奨します。設計の詳細とフィードバックの共有方法については、GitHub の課題を参照してください。
トレースフライトレコーダー
ランタイム実行トレースは、アプリケーションの低レベルの動作を理解しデバッグするための強力だが高価な方法を長い間提供してきました。残念ながら、そのサイズと実行トレースを継続的に書き込むコストのため、稀なイベントのデバッグには一般的に実用的ではありませんでした。
新しい runtime/trace.FlightRecorder API は、トレースをメモリ内のリングバッファに継続的に記録することで、ランタイム実行トレースを軽量にキャプチャする方法を提供します。重要なイベントが発生すると、プログラムは FlightRecorder.WriteTo を呼び出して、トレースの最後の数秒をファイルにスナップショットできます。このアプローチは、アプリケーションが重要なトレースのみをキャプチャできるようにすることで、はるかに小さなトレースを生成します。
FlightRecorder によってキャプチャされる時間とデータの長さは、FlightRecorderConfig 内で構成できます。
未処理のパニック出力の変更
リカバリされて再パニックになった未処理のパニックによってプログラムが終了するときに表示されるメッセージは、パニック値のテキストを繰り返さなくなりました。
以前は、panic("PANIC") でパニックになり、パニックをリカバリし、その後元の値で再パニックになったプログラムは次のように出力していました
panic: PANIC [recovered]
panic: PANIC
このプログラムは次のように出力するようになりました
panic: PANIC [recovered, repanicked]
Linux 上の VMA 名
匿名の仮想メモリ領域 (VMA) 名 (CONFIG_ANON_VMA_NAME) のカーネルサポートがある Linux システムでは、Go ランタイムは匿名メモリマッピングにその目的に関するコンテキストを注釈付けします。たとえば、ヒープメモリの場合は [anon: Go: heap] です。これは、GODEBUG 設定 decoratemappings=0 で無効にできます。
コンパイラ
nil ポインタバグ
このリリースでは、Go 1.21 で導入された、nil ポインタチェックを誤って遅延させる可能性のあるコンパイラバグが修正されています。以前は (誤って) 正常に実行されていた次のようなプログラムは、(正しく) nil ポインタ例外でパニックするようになりました
package main
import "os"
func main() {
f, err := os.Open("nonExistentFile")
name := f.Name()
if err != nil {
return
}
println(name)
}
このプログラムは、エラーをチェックする前に os.Open の結果を使用しているため、誤っています。err が nil でない場合、f の結果は nil である可能性があり、その場合 f.Name() はパニックするはずです。しかし、Go バージョン 1.21 から 1.24 では、コンパイラは nil チェックをエラーチェックの*後*に誤って遅延させ、Go 仕様に違反してプログラムが正常に実行されていました。Go 1.25 では、もはや正常に実行されません。この変更がコードに影響している場合、解決策は、非 nil エラーチェックをコードのより早い段階、できればエラーを生成するステートメントの直後に配置することです。
DWARF5 サポート
Go 1.25 のコンパイラとリンカーは、DWARF バージョン 5 を使用してデバッグ情報を生成するようになりました。新しい DWARF バージョンは、Go バイナリ内のデバッグ情報に必要なスペースを削減し、特に大規模な Go バイナリの場合、リンク時間を短縮します。DWARF 5 の生成は、ビルド時に環境変数 GOEXPERIMENT=nodwarf5 を設定することで無効にできます (このフォールバックは将来の Go リリースで削除される可能性があります)。
高速なスライス
コンパイラは、より多くの状況でスライスのバッキングストアをスタックに割り当てることができるようになり、パフォーマンスが向上します。この変更は、誤った unsafe.Pointer の使用の影響を増幅する可能性があります。例えば、issue 73199 を参照してください。これらの問題を追跡するために、bisect ツールを -compile=variablemake フラグとともに使用して、問題の原因となっている割り当てを見つけることができます。そのような新しいスタック割り当てはすべて、-gcflags=all=-d=variablemakehash=n を使用してオフにすることもできます。
リンカ
リンカーは、関数のエントリの配置を指定する -funcalign=N コマンドラインオプションを受け入れるようになりました。デフォルト値はプラットフォームに依存し、このリリースでは変更されていません。
標準ライブラリ
新しい testing/synctest パッケージ
新しい testing/synctest パッケージは、並行コードのテストをサポートします。
Test 関数は、隔離された「バブル」内でテスト関数を実行します。バブル内では、時間が仮想化されます。time パッケージの関数は偽のクロックで動作し、バブル内のすべてのゴルーチンがブロックされている場合、クロックは瞬時に進みます。
Wait 関数は、現在のバブル内のすべてのゴルーチンがブロックされるのを待ちます。
このパッケージは、Go 1.24 で GOEXPERIMENT=synctest のもとで、わずかに異なる API で最初に利用可能になりました。この実験は一般利用可能になりました。古い API は GOEXPERIMENT=synctest が設定されている場合はまだ存在しますが、Go 1.26 で削除されます。
新しい実験的な encoding/json/v2 パッケージ
Go 1.25 には、新しい実験的な JSON 実装が含まれており、ビルド時に環境変数 GOEXPERIMENT=jsonv2 を設定することで有効にできます。
有効にすると、2 つの新しいパッケージが利用可能になります
encoding/json/v2パッケージは、encoding/jsonパッケージの主要な改訂版です。encoding/json/jsontextパッケージは、JSON 構文の低レベル処理を提供します。
さらに、「jsonv2」GOEXPERIMENT が有効になっている場合
encoding/jsonパッケージは新しい JSON 実装を使用します。マーシャリングとアンマーシャリングの動作は影響を受けませんが、パッケージ関数によって返されるエラーのテキストが変更される可能性があります。encoding/jsonパッケージには、マーシャラとアンマーシャラを設定するために使用できる新しいオプションが多数含まれています。
新しい実装は、多くのシナリオで既存の実装よりも大幅に優れたパフォーマンスを発揮します。一般に、エンコーディングのパフォーマンスは両方の実装で同等であり、新しい実装ではデコーディングが大幅に高速です。より詳細な分析については、github.com/go-json-experiment/jsonbench リポジトリを参照してください。
詳細については、提案の課題を参照してください。
encoding/json のユーザーは、新しい実装との互換性の問題を検出するために、GOEXPERIMENT=jsonv2 を有効にしてプログラムをテストすることをお勧めします。
encoding/json/v2 の設計は今後も進化すると予想しています。開発者には、新しい API を試して提案の課題にフィードバックを提供することをお勧めします。
ライブラリの軽微な変更
archive/tar
Writer.AddFS の実装は、io/fs.ReadLinkFS を実装するファイルシステムに対してシンボリックリンクをサポートするようになりました。
encoding/asn1
Unmarshal および UnmarshalWithParams は、ASN.1 型 T61String および BMPString をより一貫してパースするようになりました。これにより、以前は受け入れられていた一部の不正なエンコーディングが拒否される可能性があります。
暗号
MessageSigner は、署名対象のメッセージを自分でハッシュ化したい署名者が実装できる新しい署名インターフェースです。新しい関数 SignMessage も導入されました。これは、Signer インターフェースを MessageSigner にアップグレードしようと試み、成功した場合は MessageSigner.SignMessage メソッドを使用し、失敗した場合は Signer.Sign を使用します。これは、コードが Signer と MessageSigner の両方をサポートしたい場合に使用できます。
プログラムの開始後に fips140 のGODEBUG 設定を変更しても、何もしなくなりました。以前は、許可されていないと文書化されており、変更するとパニックが発生する可能性がありました。
AVX2 命令が利用できない場合、amd64 上の SHA-1、SHA-256、および SHA-512 は遅くなりました。2015 年以降に製造されたすべてのサーバープロセッサ (およびほとんどの他のプロセッサ) は AVX2 をサポートしています。
crypto/ecdsa
新しい ParseRawPrivateKey、ParseUncompressedPublicKey、PrivateKey.Bytes、および PublicKey.Bytes 関数とメソッドは低レベルのエンコーディングを実装し、crypto/elliptic または math/big 関数とメソッドを使用する必要がなくなりました。
FIPS 140-3 モードが有効な場合、署名は非 FIPS モードのパフォーマンスと一致し、4 倍高速になりました。
crypto/ed25519
FIPS 140-3 モードが有効な場合、署名は非 FIPS モードのパフォーマンスと一致し、4 倍高速になりました。
crypto/elliptic
一部の Curve 実装における非公開および非文書化の Inverse および CombinedMult メソッドが削除されました。
crypto/rsa
PublicKey は、モジュラス値が秘密として扱われると主張しなくなりました。VerifyPKCS1v15 と VerifyPSS はすでに、すべての入力が公開されており漏洩する可能性があると警告しており、他の公開値からモジュラスを回復できる数学的攻撃が存在します。
鍵生成が 3 倍高速になりました。
crypto/sha1
SHA-NI 命令が利用可能な場合、amd64 上でのハッシュ化が 2 倍高速になりました。
crypto/sha3
新しい SHA3.Clone メソッドは hash.Cloner を実装しています。
Apple M プロセッサ上でのハッシュ化が 2 倍高速になりました。
crypto/tls
新しい ConnectionState.CurveID フィールドは、接続確立に使用された鍵交換メカニズムを公開します。
新しい Config.GetEncryptedClientHelloKeys コールバックは、クライアントが暗号化されたクライアント Hello 拡張を送信したときにサーバーが使用する EncryptedClientHelloKey を設定するために使用できます。
RFC 9155 に従い、SHA-1 署名アルゴリズムは TLS 1.2 ハンドシェイクで許可されなくなりました。これらは、GODEBUG 設定 tlssha1=1 で再有効化できます。
FIPS 140-3 モードが有効な場合、TLS 1.2 で拡張マスターシークレットが必須になり、Ed25519 と X25519MLKEM768 が許可されるようになりました。
TLS サーバーは、クライアントが最も好むプロトコルバージョンでなくても、サポートされている最高のプロトコルバージョンを優先するようになりました。
TLS クライアントとサーバーの両方が、仕様に厳密に従い、仕様外の動作を拒否するようになりました。準拠するピアとの接続は影響を受けないはずです。
crypto/x509
CreateCertificate、CreateCertificateRequest、および CreateRevocationList は、crypto.Signer と同様に crypto.MessageSigner 署名インターフェースを受け入れられるようになりました。これにより、これらの関数は、呼び出し側ではなく、署名操作の一部としてハッシュ化が行われる「ワンショット」署名インターフェースを実装する署名者を使用できます。
CreateCertificate は、SubjectKeyId が欠落している場合、切り捨てられた SHA-256 を使用して値を設定するようになりました。GODEBUG 設定 x509sha256skid=0 は SHA-1 に戻ります。
ParseCertificate は、pathLenConstraint が負の BasicConstraints 拡張を含む証明書を拒否するようになりました。
ParseCertificate は、ASN.1 T61String および BMPString 型でエンコードされた文字列をより一貫して処理するようになりました。これにより、以前は受け入れられていた一部の不正なエンコーディングが拒否される可能性があります。
debug/elf
debug/elf パッケージは 2 つの新しい定数を追加します
PT_RISCV_ATTRIBUTES- RISC-V ELF パース用の
SHT_RISCV_ATTRIBUTES。
go/ast
FilterPackage、PackageExports、および MergePackageFiles 関数、ならびに MergeMode 型とその定数はすべて非推奨になりました。これらは、長らく非推奨となっている Object および Package メカニズムでのみ使用されるためです。
新しい PreorderStack 関数は、Inspect と同様に、構文ツリーをトラバースし、サブツリーへの降下を制御しますが、利便性のために、各ポイントで囲むノードのスタックも提供します。
go/parser
ParseDir 関数は非推奨になりました。
go/token
新しい FileSet.AddExistingFiles メソッドを使用すると、既存の File を FileSet に追加したり、任意の File セットに対して FileSet を構築したりできるため、長期間実行されるアプリケーションにおける単一のグローバル FileSet に関連する問題を軽減します。
go/types
Var は、変数をパッケージレベル、レシーバー、パラメータ、結果、ローカル変数、または構造体フィールドのいずれかに分類する Var.Kind メソッドを持つようになりました。
新しい LookupSelection 関数は、既存の LookupFieldOrMethod 関数と同様に、指定された名前とレシーバー型のフィールドまたはメソッドを検索しますが、結果を Selection の形式で返します。
ハッシュ
新しい XOF インターフェースは、SHAKE のような任意または無制限の出力長を持つハッシュ関数である「拡張可能出力関数」によって実装できます。
新しい Cloner インターフェースを実装するハッシュは、その状態のコピーを返すことができます。すべての標準ライブラリの Hash 実装は Cloner を実装するようになりました。
hash/maphash
新しい Hash.Clone メソッドは hash.Cloner を実装しています。
io/fs
新しい ReadLinkFS インターフェースは、ファイルシステム内のシンボリックリンクを読み取る機能を提供します。
log/slog
GroupAttrs は、Attr 値のスライスからグループ Attr を作成します。
Record は Source メソッドを持つようになり、利用可能な場合はそのソース位置を、利用できない場合は nil を返します。
mime/multipart
新しいヘルパー関数 FileContentDisposition は、multipart の Content-Disposition ヘッダーフィールドを構築します。
net
LookupMX および Resolver.LookupMX は、有効なドメイン名と同様に、有効な IP アドレスのように見える DNS 名を返すようになりました。以前は、ネームサーバーが IP アドレスを DNS 名として返した場合、RFC によって要求されているように、LookupMX はそれを破棄していました。しかし、実際にはネームサーバーは IP アドレスを返すことがあります。
Windows では、ListenMulticastUDP は IPv6 アドレスをサポートするようになりました。
Windows では、os.File とネットワーク接続間で変換できるようになりました。具体的には、FileConn、FilePacketConn、および FileListener 関数が実装され、開いているファイルに対応するネットワーク接続またはリスナーを返します。同様に、TCPConn、UDPConn、UnixConn、IPConn、TCPListener、および UnixListener の File メソッドが実装され、ネットワーク接続の基盤となる os.File を返します。
net/http
新しい CrossOriginProtection は、安全でないクロスオリジンブラウザリクエストを拒否することで、クロスサイトリクエストフォージェリ (CSRF) に対する保護を実装します。これは最新のブラウザの Fetch メタデータを使用し、トークンやクッキーを必要とせず、オリジンベースおよびパターンベースのバイパスをサポートします。
os
Windows では、NewFile は非同期 I/O 用に開かれたハンドル (つまり、syscall.CreateFile 呼び出しで syscall.FILE_FLAG_OVERLAPPED が指定されている) をサポートするようになりました。これらのハンドルは Go ランタイムの I/O 完了ポートに関連付けられ、結果の File に以下の利点を提供します
- I/O メソッド (
File.Read、File.Write、File.ReadAt、およびFile.WriteAt) は OS スレッドをブロックしません。 - 期限メソッド (
File.SetDeadline、File.SetReadDeadline、およびFile.SetWriteDeadline) がサポートされています。
この機能強化は、Windows 上で名前付きパイプを介して通信するアプリケーションにとって特に有益です。
ハンドルは一度に 1 つの完了ポートにのみ関連付けることができることに注意してください。NewFile に提供されたハンドルが既に完了ポートに関連付けられている場合、返された File は同期 I/O モードにダウングレードされます。この場合、I/O メソッドは OS スレッドをブロックし、期限メソッドは効果がありません。
DirFS および Root.FS によって返されるファイルシステムは、新しい io/fs.ReadLinkFS インターフェースを実装します。CopyFS は、io/fs.ReadLinkFS を実装するファイルシステムをコピーする際にシンボリックリンクをサポートします。
Root 型は、次の追加メソッドをサポートします
Root.ChmodRoot.ChownRoot.ChtimesRoot.LchownRoot.LinkRoot.MkdirAllRoot.ReadFileRoot.ReadlinkRoot.RemoveAllRoot.RenameRoot.SymlinkRoot.WriteFile
reflect
新しい TypeAssert 関数は、Value を指定された型の Go 値に直接変換することを許可します。これは、Value.Interface の結果に対して型アサーションを使用するのと似ていますが、不要なメモリ割り当てを回避します。
regexp/syntax
\p{name} および \P{name} 文字クラス構文は、Any、ASCII、Assigned、Cn、および LC の名前、ならびに \pL のような Unicode カテゴリエイリアス (例: \p{Letter}) を受け入れるようになりました。Unicode TR18 に従って、空白、アンダースコア、ハイフンを無視し、大文字と小文字を区別しない名前ルックアップを使用するようになりました。
runtime
AddCleanup によってスケジュールされたクリーンアップ関数は、並行して並列に実行されるようになり、unique パッケージのような大量の使用に対してクリーンアップがより実用的になりました。ただし、クリーンアップキューをブロックしないように、個々のクリーンアップは長時間実行またはブロックする必要がある場合、その作業を新しいゴルーチンにシフトする必要があります。
新しい GODEBUG=checkfinalizers=1 設定は、GC ガイドで説明されているようなファイナライザとクリーンアップの一般的な問題を見つけるのに役立ちます。このモードでは、ランタイムは各ガベージコレクションサイクルで診断を実行し、長時間実行されるファイナライザやクリーンアップに関する問題を特定するのに役立つように、ファイナライザとクリーンアップキューの長さを stderr に定期的に報告します。詳細については、GODEBUG のドキュメントを参照してください。
新しい SetDefaultGOMAXPROCS 関数は、GOMAXPROCS 環境変数が設定されていない場合と同様に、GOMAXPROCS をランタイムのデフォルト値に設定します。これは、GOMAXPROCS 環境変数または以前の GOMAXPROCS への呼び出しによって無効になっている場合でも、新しい GOMAXPROCS デフォルトを有効にするのに役立ちます。
runtime/pprof
ランタイム内部ロックの競合に関するミューテックスプロファイルは、遅延の原因となったクリティカルセクションの終点を正しく指すようになりました。これは、sync.Mutex 値の競合に関するプロファイルの動作と一致します。このプロファイルの部分について Go 1.22 から 1.24 の異常な動作をオプトインできた GODEBUG の runtimecontentionstacks 設定は削除されました。
sync
新しい WaitGroup.Go メソッドは、ゴルーチンの作成とカウントの一般的なパターンをより便利にします。
testing
新しいメソッド T.Attr、B.Attr、および F.Attr は、テストログに属性を出力します。属性は、テストに関連付けられた任意のキーと値です。
たとえば、TestF という名前のテストで t.Attr("key", "value") は次を出力します
=== ATTR TestF key value
-json フラグを使用すると、属性は新しい「attr」アクションとして表示されます。
T、B、および F の新しい Output メソッドは、TB.Log と同じテスト出力ストリームに書き込む io.Writer を提供します。TB.Log と同様に、出力はインデントされますが、ファイルと行番号は含まれません。
並列テストが実行されている場合、AllocsPerRun 関数はパニックするようになりました。AllocsPerRun の結果は、他のテストが実行されている場合、本質的に不安定です。新しいパニック動作は、そのようなバグを捕捉するのに役立ちます。
testing/fstest
MapFS は、新しい io/fs.ReadLinkFS インターフェースを実装します。TestFS は、実装されている場合、io/fs.ReadLinkFS インターフェースの機能を検証します。TestFS は、無限再帰を避けるためにシンボリックリンクを追跡しなくなります。
unicode
新しい CategoryAliases マップは、「L」の「Letter」のようなカテゴリのエイリアス名へのアクセスを提供します。
新しいカテゴリ Cn と LC は、それぞれ未割り当てのコードポイントと大文字と小文字を区別する文字を定義します。これらは Unicode によって常に定義されていましたが、Go の以前のバージョンでは誤って省略されていました。C カテゴリには Cn が含まれるようになり、すべての未割り当てのコードポイントが追加されたことを意味します。
ユニーク
unique パッケージは、インターン化された値をより熱心に、より効率的に、そして並列に回収するようになりました。その結果、Make を使用するアプリケーションは、大量の真にユニークな値がインターン化されたときにメモリの肥大化を経験する可能性が低くなります。
Make に渡される Handle を含む値は、以前は Handle 値のチェーンの深さに比例して、複数のガベージコレクションサイクルで収集する必要がありました。今では、未使用になると、単一のサイクルで迅速に収集されます。
ポート
Darwin
Go 1.24 リリースノートで発表されたように、Go 1.25 は macOS 12 Monterey 以降を必要とします。以前のバージョンのサポートは終了しました。
Windows
Go 1.25 は、壊れた 32 ビット windows/arm ポート (GOOS=windows GOARCH=arm) を含む最後のリリースです。Go 1.26 で削除されます。
Loong64
linux/loong64 ポートは、レース検出器、runtime.SetCgoTraceback を使用した C コードからのトレースバック情報の収集、および内部リンクモードでの cgo プログラムのリンクをサポートするようになりました。
RISC-V
linux/riscv64 ポートは、plugin ビルドモードをサポートするようになりました。
GORISCV64 環境変数は、RVA23U64 ユーザーモードアプリケーションプロファイルを選択する新しい値 rva23u64 を受け入れるようになりました。