まえがき
Go 1.25 のリリースノートをChatGPTで日本語に翻訳しました。
Go 1.25 Release Notes
前のバージョン:Go1.24のリリースノート(日本語訳)
リリースノート一覧:Goリリース情報
Go 1.25の紹介
最新のGoリリース、バージョン1.25は2025年8月 に登場し、Go 1.24 から6か月後にリリースされます。変更のほとんどはツールチェーン、ランタイム、ライブラリの実装にあります。リリースは常に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
を使用して、root-path
がrepo-url
のsubdir
に対応することを示す構文を使用してモジュールパスを解決する
際に使用されます。
新しいwork
パッケージパターンは、work
(以前はmain
と呼ばれていた)モジュール内のすべてのパッケージに一致します。モジュールモードでは単一のwork
モジュール、ワークスペースモードではワークスペースモジュールのセットのいずれかです。go
コマンドがgo.mod
またはgo.work
ファイルのgo
行を更新する際に、コマンドの現在のバージョンを指定するツールチェーン行を追加しなくなりました
。
Vet
go vet
コマンドには新しいアナライザーが含まれています:
- waitgroup 、これはsync.WaitGroup.Add への誤った呼び出しを報告します。
- hostport
、これは
fmt.Sprintf("%s:%d", host, port)
を使用してnet.Dial のアドレスを構築する使用を報告します。これはIPv6では機能しないため、代わりに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
を呼び出すことで自動的に無効になります。また、GODEBUG設定
のcontainermaxprocs=0
およびupdatemaxprocs=0
で明示的に無効にすることもできます。更新されたcgroup制限を読み取るために、ランタイムはプロセスの存続期間中にcgroupファイルのキャッシュされたファイルディスクリプタを保持します。
新しい実験的なガベージコレクタ
新しいガベージコレクタが実験として利用可能になりました。このガベージコレクタの設計は、小さなオブジェクトのマーキングとスキャンのパフォーマンスを、より良い局所性とCPUスケーラビリティを通じて改善します。ベンチマーク結果はさまざまですが、ガベージコレクタを多用する実際のプログラムでガベージコレクションのオーバーヘッドが10〜40%削減されることを期待しています。新しいガベージコレクタは、ビルド時にGOEXPERIMENT=greenteagc
を設定することで有効にできます。設計は引き続き進化し、改善されることを期待しています。そのため、Go開発者に試してもらい、経験を報告してもらうことを奨励しています。設計の詳細とフィードバックの共有方法については、GitHubの問題
を参照してください。
トレースフライトレコーダー
ランタイム実行トレース は、アプリケーションの低レベルの動作を理解しデバッグするための強力ですが高価な方法を長い間提供してきました。残念ながら、そのサイズと実行トレースを継続的に書き込むコストのため、まれなイベントをデバッグするには一般的に実用的ではありませんでした。新しいruntime/trace.FlightRecorder APIは、トレースをメモリ内リングバッファに継続的に記録することで、ランタイム実行トレースをキャプチャする軽量な方法を提供します。重要なイベントが発生した場合、プログラムはFlightRecorder.WriteTo を呼び出して、トレースの最後の数秒をファイルにスナップショットします。このアプローチは、アプリケーションが重要なトレースのみをキャプチャできるようにすることで、はるかに小さなトレースを生成します。FlightRecorder によってキャプチャされる時間の長さとデータの量は、FlightRecorderConfig 内で構成できます。
未処理のパニック出力の変更
未処理のパニックが回復され再パニックされたためにプログラムが終了したときに印刷されるメッセージは、パニック値のテキストを繰り返さなくなりました。以前は、panic("PANIC")
でパニックし、パニックを回復し、元の値で再パニックしたプログラムは次のように印刷されていました:
|
|
このプログラムは今後次のように印刷されます:
|
|
LinuxでのVMA名
匿名仮想メモリアリア(VMA)名のカーネルサポートがあるLinuxシステムでは、Goランタイムは匿名メモリマッピングにその目的に関するコンテキストを注釈します。例:[anon: Go: heap]はヒープメモリを示します。これは、GODEBUG設定
のdecoratemappings=0
で無効にできます。
コンパイラ
nilポインタバグ
このリリースでは、Go 1.21で導入されたコンパイラバグ を修正しました。このバグはnilポインタチェックを誤って遅延させる可能性がありました。次のようなプログラムは、以前は正常に(誤って)実行されていましたが、今後は(正しく)nilポインタ例外でパニックします:
|
|
このプログラムは、エラーをチェックする前に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
をより一貫して解析するようになりました。これにより、以前に受け入れられていた不正なエンコーディングが拒否される可能性があります。
crypto
MessageSigner
は、新しい署名インターフェースで、署名されるメッセージを自分でハッシュしたい署名者によって実装できます。また、新しい関数SignMessage
も導入され、Signer
インターフェースをMessageSigner
にアップグレードしようとし、成功した場合はMessageSigner.SignMessage
メソッドを使用し、そうでない場合はSigner.Sign
を使用します。これは、コードがSigner
とMessageSigner
の両方をサポートしたい場合に使用できます。プログラムが開始された後にfips140
GODEBUG設定
を変更することは、現在は無効です。以前は許可されていないと文書化されており、変更するとパニックを引き起こす可能性がありました。SHA-1、SHA-256、およびSHA-512は、AVX2命令が利用できない場合、amd64で遅くなりました。2015年以降に製造されたすべてのサーバープロセッサ(およびほとんどの他のプロセッサ)はAVX2をサポートしています。
crypto/ecdsa
新しいParseRawPrivateKey 、ParseUncompressedPublicKey 、PrivateKey.Bytes 、およびPublicKey.Bytes 関数とメソッドは、低レベルのエンコーディングを実装し、crypto/elliptic やmath/big の関数とメソッドを使用する必要を置き換えます。FIPS 140-3モードが有効な場合、署名は4倍速くなり、非FIPSモードのパフォーマンスに一致します。
crypto/ed25519
FIPS 140-3モードが有効な場合、署名は4倍速くなり、非FIPSモードのパフォーマンスに一致します。
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
コールバックは、クライアントが暗号化されたクライアントハロー拡張を送信するときにサーバーが使用するEncryptedClientHelloKey
を設定するために使用できます。SHA-1署名アルゴリズムは、RFC 9155
に従って、TLS 1.2ハンドシェイクで禁止されました。GODEBUG
設定のtlssha1=1
で再度有効にすることができます。FIPS 140-3モード
が有効な場合、TLS 1.2では拡張マスターシークレットが必要になり、Ed25519とX25519MLKEM768が許可されるようになりました。TLSサーバーは、クライアントの最も優先されるプロトコルバージョンでなくても、サポートされている最高のプロトコルバージョンを優先するようになりました。TLSクライアントとサーバーの両方が、仕様に従ってより厳密に動作し、仕様外の動作を拒否するようになりました。準拠したピアとの接続には影響がないはずです。
crypto/x509
CreateCertificate
、CreateCertificateRequest
、およびCreateRevocationList
は、crypto.MessageSigner
署名インターフェースとcrypto.Signer
の両方を受け入れることができるようになりました。これにより、これらの関数は、ハッシュ化が署名操作の一部として行われる「ワンショット」署名インターフェースを実装する署名者を使用できるようになります。CreateCertificate
は、SubjectKeyId
が欠落している場合、トランケートされたSHA-256を使用してSubjectKeyId
を埋めるようになりました。GODEBUG設定
のx509sha256skid=0
はSHA-1に戻ります。ParseCertificate
は、負のpathLenConstraint
を含むBasicConstraints
拡張を含む証明書を拒否するようになりました。ParseCertificate
は、ASN.1のT61String
およびBMPString
タイプでエンコードされた文字列をより一貫して処理するようになりました。これにより、以前に受け入れられていた不正なエンコーディングが拒否される可能性があります。
debug/elf
debug/elf パッケージには、RISC-V ELF解析用の2つの新しい定数が追加されました:
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 の形式で返します。
hash
新しい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
は、マルチパートのContent-Disposition
ヘッダーフィールドを構築します。
net
LookupMX
とResolver.LookupMX
は、IPアドレスのように見えるDNS名と有効なドメイン名を返すようになりました。以前は、ネームサーバーがDNS名としてIPアドレスを返した場合、LookupMX
はそれを破棄していましたが、RFCに従っていました。しかし、実際にはネームサーバーはIPアドレスを返すことがあります。Windowsでは、ListenMulticastUDP
がIPv6アドレスをサポートするようになりました。Windowsでは、os.File
とネットワーク接続の間で変換することが可能になりました。具体的には、FileConn
、FilePacketConn
、およびFileListener
関数が実装され、オープンファイルに対応するネットワーク接続またはリスナーを返します。同様に、TCPConn
、UDPConn
、UnixConn
、IPConn
、TCPListener
、およびUnixListener
のFile
メソッドが実装され、ネットワーク接続の基になるos.File
を返します。
net/http
新しいCrossOriginProtection は、クロスサイトリクエストフォージェリ(CSRF) に対する保護を実装し、安全でないクロスオリジンのブラウザリクエストを拒否します。これは最新のブラウザフェッチメタデータ を使用し、トークンやクッキーを必要とせず、オリジンベースおよびパターンベースのバイパスをサポートします。
os
Windowsでは、NewFile が非同期I/O用にオープンされたハンドルをサポートするようになりました(つまり、syscall.FILE_FLAG_OVERLAPPED がsyscall.CreateFile 呼び出しで指定されています)。これらのハンドルは、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.Chmod
- Root.Chown
- Root.Chtimes
- Root.Lchown
- Root.Link
- Root.MkdirAll
- Root.ReadFile
- Root.Readlink
- Root.RemoveAll
- Root.Rename
- Root.Symlink
- Root.WriteFile
reflect
新しいTypeAssert 関数は、Value を指定された型のGo値に直接変換することを許可します。これは、Value.Interface の結果に型アサーションを使用するのと似ていますが、不要なメモリアロケーションを回避します。
regexp/syntax
\p{name}
および\P{name}
文字クラス構文は、Any
、ASCII
、Assigned
、Cn
、LC
の名前を受け入れるようになりました。また、\p{Letter}
を\pL
のようなUnicodeカテゴリエイリアスとして受け入れます。Unicode TR18
に従って、スペース、アンダースコア、ハイフンを無視して大文字小文字を区別しない名前の検索も行います。
runtime
AddCleanup
によってスケジュールされたクリーンアップ関数は、現在並行して実行され、並列に実行されるようになり、クリーンアップがunique
パッケージのように重く使用される場合により実行可能になります。ただし、個々のクリーンアップは、長時間実行またはブロックする必要がある場合は、新しいゴルーチンに作業を移すべきです。新しいGODEBUG=checkfinalizers=1
設定は、ファイナライザやクリーンアップに関する一般的な問題を見つけるのに役立ちます。これらの問題は、GCガイド
で説明されています。このモードでは、ランタイムは各ガベージコレクションサイクルで診断を実行し、ファイナライザとクリーンアップキューの長さを定期的に標準エラー出力に報告して、長時間実行されるファイナライザやクリーンアップの問題を特定するのに役立ちます。詳細については、GODEBUGドキュメント
を参照してください。新しいSetDefaultGOMAXPROCS
関数は、GOMAXPROCS
環境変数が設定されていないかのように、GOMAXPROCS
をランタイムのデフォルト値に設定します。これは、GOMAXPROCS
環境変数または以前のGOMAXPROCS
呼び出しによって無効にされた場合に、新しいGOMAXPROCS
デフォルトを有効にするのに役立ちます。
runtime/pprof
ランタイム内部ロックの競合に関するミューテックスプロファイルは、遅延を引き起こしたクリティカルセクションの終わりを正しく指すようになりました。これは、sync.Mutex
値の競合に関するプロファイルの動作と一致します。GODEBUG
のruntimecontentionstacks
設定は、このプロファイルのこの部分に関するGo 1.22から1.24の異常な動作を選択することを許可していましたが、現在は削除されました。
sync
新しいWaitGroup.Go メソッドは、ゴルーチンの作成とカウントの一般的なパターンをより便利にします。
testing
新しいメソッドT.Attr
、B.Attr
、およびF.Attr
は、テストログに属性を出力します。属性は、テストに関連付けられた任意のキーと値です。たとえば、TestF
という名前のテストでは、t.Attr("key", "value")
は次のように出力します:
|
|
-json
フラグを使用すると、属性は新しい「attr」アクションとして表示されます。新しいOutput
メソッドは、T
、B
、およびF
のio.Writer
を提供し、TB.Log
と同じテスト出力ストリームに書き込みます。TB.Log
のように、出力はインデントされますが、ファイルと行番号は含まれません。AllocsPerRun
関数は、並列テストが実行されている場合にパニックします。AllocsPerRun
の結果は、他のテストが実行されている場合に本質的に不安定です。新しいパニック動作は、そのようなバグをキャッチするのに役立ちます。
testing/fstest
MapFS は、新しいio/fs.ReadLinkFS インターフェースを実装します。TestFS は、実装されている場合、io/fs.ReadLinkFS インターフェースの機能を検証します。TestFS は、無制限の再帰を避けるためにシンボリックリンクをたどらなくなりました。
unicode
新しいCategoryAliases マップは、「Letter」を「L」としてのようなカテゴリエイリアス名へのアクセスを提供します。新しいカテゴリCn とLC は、それぞれ未割り当てのコードポイントと大文字小文字のある文字を定義します。これらは常にUnicodeによって定義されていましたが、以前のバージョンのGoでは誤って省略されていました。C カテゴリには、Cn が含まれるようになり、すべての未割り当てのコードポイントが追加されました。
unique
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
ポートは、プラグインビルドモードをサポートするようになりました。GORISCV64
環境変数は、新しい値rva23u64
を受け入れるようになり、RVA23U64ユーザーモードアプリケーションプロファイルを選択します。