Go1.25 リリースを網羅する
はじめに
待望のGo1.25が2025年8月にリリースされますね!
この記事ではリリースノートをもとに、Go1.25の新機能を網羅的に紹介していきます。
公式のリリースノートと対応させた書き方をすること、それぞれのアップデートに対応するissueをリンクすることを意識しました。
間違ってる部分等あればご指摘いただけますと幸いです。
Language
言語仕様における「core type」の概念が削除されました。これはGo言語自体の動作には影響しません。詳細はブログ記事で解説されています。
もう少し詳しく背景を述べると、
core typeの定義は概ね以下の通りです。
- ある型が型パラメータではない場合、そのcore typeはその型のunderlying typeです。
- ある型が型パラメータである場合、core typeはその型パラメータの型セット内の全ての型が持つ単一のunderlying typeです。もし型セットが異なるunderlying typeを持つ場合、core typeは存在しません。
具体例を挙げます。
- core typeが存在する例
-
interface{ ~[]int }
- このインターフェースによって記述される型セットは、[]intのunderlying typeを持つすべての型で構成されます。
- この場合、型セット内のすべての型が[]intという単一のunderlying typeを共有しているため、このインターフェースはcore typeとして[]intを持ちます。
- 型パラメータではない通常の型の場合、そのcore typeは単にその型のunderlying typeです。例えば、intのcore typeはint、stringのcore typeはstringです。
-
- core typeが存在しない例
-
type Constraint interface { ~[]byte | ~string Hash() uint64 }
- このインターフェースによって記述される型セットは、underlying typeが[]byteまたはstringであり、かつHashメソッドを含むすべての型で構成されます。
- この型セットには、[]byte(スライス型)とstring(文字列型)という異なるunderlying typeが含まれています
- したがって、このConstraintインターフェースはcore typeを持ちません。
-
このように過度に制限的で複雑な仕様は学習コストを増加させるため、Go1.25ではcore typeの概念が削除されました。
この変更は既存の動作には影響せず、コンパイラのエラーメッセージもcore typeに言及しないように更新されました。
Tools
Go command
AddressSanitizerのリーク検出がデフォルトで有効化
go build -asan
オプションを使用してビルドした場合、プログラム終了時のメモリリーク検出がデフォルトで有効になります。Cで確保されたメモリが解放されず、かつGoやCの他のメモリから参照されていない場合に「リーク」として報告される仕組みです。
cgo を利用して C のライブラリを呼び出しているようなケースで特に有効です。
ASAN_OPTIONS=detect_leaks=0
を環境変数に設定することで、この報告を無効にできます。
プリビルドツールバイナリの削減
Goディストリビューションに含まれるプリビルドツールバイナリが削減されます。
これまでの Go のディストリビューションには、go doc
や go fix
といった各種ツールが事前にバイナリとして含まれていました。
Go 1.25 からは、コンパイラやリンカなどのコアツールチェインのみをプリビルド提供し、他のツールは含めません。
ビルドやテスト操作で直接呼び出されないツールはgo tool
によって初回使用時にビルドされる仕組みになりました。
go.mod ignoreディレクティブ
go.mod ファイルに ignore
ディレクティブを追加することで、goコマンドが特定のディレクトリを無視するように指定できます。
これにより、all
や ./...
などのパッケージパターンにマッチする際に、指定されたディレクトリとそのサブディレクトリ内のファイルが無視されます。
go doc -httpオプション
go doc -http
オプションを使用すると、指定されたオブジェクトのドキュメントを表示するドキュメントサーバーが起動し、ブラウザでドキュメントが開かれます。
例えば、go doc -http net/http
と実行すると、net/http
パッケージのドキュメントがブラウザで開きます。
go version -m -jsonオプション
Goバイナリに埋め込まれたruntime/debug.BuildInfo
構造体をJSON形式で出力します。
runtime/debug.BuildInfo
には、バイナリがビルドされた際のGoのバージョン、mainパッケージのパス、依存モジュールなどの情報が含まれています。
go version -m によってバイナリに含まれるBuildInfoを表示する機能は以前から存在していましたが、Go1.25では-json
オプションが追加されました。
サブディレクトリのモジュールルート対応
<meta name="go-import" content="root-path vcs repo-url subdir">
というような構文が使用できるようになりました。これにより、リポジトリのサブディレクトリをモジュールルートとして指定できるようになります。
これまでは、<meta>
タグで指定できるのは以下の3つの要素のみでした。
<meta name="go-import" content="root-path vcs repo-url">
これに加えて、4つ目の要素としてsubdir
を指定できるようになりました。
<meta name="go-import" content="root-path vcs repo-url subdir">
そもそも、metaタグはGoのモジュールシステムがカスタムドメインと実際のリポジトリの場所を結びつけるための仕組みです。
例えば、<meta name="go-import" content="golang.org/x/mod git https://go.googlesource.com/mod">
のように指定すると、Goのコマンドはこのタグを見て、golang.org/x/mod
モジュールを リモートURLhttps://go.googlesource.com/mod
のGitリポジトリから取得します。
workspace pattern matching
Go 1.25では、新しいworkパッケージパターンが追加されます。このパターンは、work(旧称main)モジュール内のすべてのパッケージにマッチします。モジュールモードでは単一のworkモジュール、ワークスペースモードではワークスペース内のモジュール群を対象とします。
例えば、以下のようなgo.workファイルがあるとします。
go 1.25
use (
./modA
./modB
./modC
)
これまでワークスペース内のすべてのモジュールに対してコマンドを実行するには、
cd modA && go vet ./...
cd ../modB && go vet ./...
cd ../modC && go vet ./...
というように、それぞれのモジュールに対してcdしてgo vetを実行する必要がありました。
もしくは、
go vet all
というようにする必要がありました。go vet all というコマンドは、依存関係を含むすべてのパッケージに対して、go vetを実行します。
これが、今回の変更によって、
go vet work/...
とすると、ワークスペースで明示的に管理されているモジュールに対して、go vetを実行できるようになります。
toolchain行の自動追加廃止
go.mod
やgo.work
ファイルのgo
行を更新する際、コマンドの現在のバージョンを指定するtoolchain
行が自動的に追加されなくなります。
Vet
2つの新しいアナライザが追加されます。
waitgroupアナライザ
sync.WaitGroup.Add
の誤った呼び出しを検出します。
例えば、以下のようなコードの場合、検出されます。
go func() {
wg.Add(1) // goroutine内でAdd
defer wg.Done()
}()
goroutine内でAdd
を呼び出すと、レースコンディションを起こす可能性があります。
以下が正しい使い方です。
wg.Add(1)
go func() {
defer wg.Done()
}()
hostportアナライザ
IPv6非互換のアドレス構築を検出し、net.JoinHostPort
の使用を提案します。
例えば、以下のようなコードの場合が検出されます。
addr := fmt.Sprintf("%s:%d", host, port)
fmt.Sprintf
でホストとポートを連結する形式は、特にIPv6アドレス(例えば [::1]:8080
のように角括弧が必要)を含む場合に問題を引き起こします。
以下のようにnet.JoinHostPort
を使用すると、IPv6アドレスを正しく扱えます。
addr := net.JoinHostPort(host, strconv.Itoa(port))
Runtime
コンテナ対応GOMAXPROCS
GOMAXPROCS
のデフォルト動作が変わります。
-
デフォルト値の算出ロジック
- cgroupのCPU帯域制限を考慮し、利用可能な論理CPU数とcgroupのCPU制限(厳密には最低でも2)の低い方を
GOMAXPROCS
のデフォルト値とする。cgroupのCPU制限はKubernetesの「CPU limit」に対応するが、「CPU requests」は考慮されない。
- cgroupのCPU帯域制限を考慮し、利用可能な論理CPU数とcgroupのCPU制限(厳密には最低でも2)の低い方を
-
定期的な更新
- 利用可能な論理CPU数やcgroup CPU帯域制限が変更された場合、ランタイムが定期的に
GOMAXPROCS
を更新する。
- 利用可能な論理CPU数やcgroup CPU帯域制限が変更された場合、ランタイムが定期的に
また、これらの動作はGOMAXPROCS
を環境変数から手動で設定したり、runtime.GOMAXPROCS
を呼び出して設定することで、無効にできます。
これを再び有効にするには、SetDefaultGOMAXPROCS
関数を呼び出すことで、有効にできます。
Garbage Collector
オブジェクトのマーキングとスキャン性能を改善するGreenTeaGCというものが実験的に導入されます。
既存のGCには以下のような課題がありました。
- 不均一なメモリ構造に対する適応性が低い.
- 空間的局所性の問題(メモリの異なる部分にアクセス等)
- 時間的局所性の問題(同じメモリへの繰り返しアクセス等)
これらを解決するために、GreenTeaGCでは個々のオブジェクトではなくて、連続したブロック単位でメモリをスキャンするような構造になっています。
以下のようにGOEXPERIMENT=greenteagcを設定することで有効化できます。
GOEXPERIMENT=greenteagc go build -o myapp .
ベンチマーク結果は様々ですが、GCを多用する実際のプログラムで10〜40%のGCオーバーヘッド削減が期待されます。
設計は今後も進化する予定で、issueでフィードバックを募集しています。
panic output
panicがリカバリされ、再び同じ値でpanicになった場合のメッセージが変更されます。
# これまで
panic: PANIC [recovered]
panic: PANIC
# Go 1.25
panic: PANIC [recovered, repanicked]
LinuxでのVMA
CONFIG_ANON_VMA_NAME
をサポートするLinuxシステムで、Goランタイムが匿名メモリマッピングに目的を示すコンテキストを付与します。
背景としては、Linux カーネル(バージョン 5.17 以降)では、匿名仮想メモリ領域(anonymous VMA)に名前をつけるための API(prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME…))が追加されました。Go1.25以降からは、匿名メモリマッピング(mmap によるヒープ・スタック・スレッド・シグナルマスク領域など)に対して、用途を示す名前を付けるようになりました。
例えば、ヒープメモリの場合には、[anon: Go: heap]
というようなコンテキストが付与されます。
こうすることで、/proc/[pid]/maps
や smaps
に用途が出力され、メモリの調査やデバッグがしやすくなります。
GODEBUG
でdecoratemappings=0
を設定すると無効化できます
Compiler
DWARF v5
デバッグ情報の生成にDWARFバージョン5を使用するようになり、デバッグ情報のサイズ削減によるバイナリサイズの縮小、リンク時間の短縮等が期待されます。
また、DWARF v5 はより構造化された情報を提供するため、gdb/lldb
などのツールでの変数表示・スタックトレースなどが改善される可能性があります。
DWARF(ドワーフ)は初めて聞いたのですが、プログラムのデバッグ情報を表現するための標準フォーマットらしいです。
nilポインタチェックの修正
エラーチェック前のnilポインタ参照が正しくパニックを起こすようになります。
package main
import "os"
func main() {
f, err := os.Open("nonExistentFile")
name := f.Name() // Go 1.25でパニック
if err != nil {
return
}
println(name)
}
上のようなエラーチェック前にnilポインタを参照するプログラムがGo 1.21〜1.24ではコンパイラのバグで正常に動作していましたが、仕様に反していたためパニックを起こすように修正されました。
スタック上のスライス割り当て改善
Go 1.25では、コンパイラのエスケープ分析がさらに強化され、特に make([]T, n)
によるスライスの元となる配列が、より多くのケースでヒープではなくスタックに配置されるようになりました。これによってパフォーマンスの向上が期待できます。
ただし、スタックに置かれる寿命が短くなるため、不適切に unsafe.Pointer
を使う場合に、予期しないライフタイムの短縮によりバグやクラッシュが発生する可能性があります。
この場合に、bisect
ツールを-compile=variablemake
フラグと共に使用することで、問題を引き起こしているスタック割り当て箇所を特定することが可能です。
Linker
新しい-funcalign=N
コマンドラインオプションが追加され、関数エントリのアラインメントを指定できます。デフォルト値はプラットフォーム依存で、このリリースでは変更ありません。
特定のハードウェアアーキテクチャやパフォーマンス要件に合わせて、関数のメモリアラインメントを調整できるようにするためのオプションです。
例えば、
go build -ldflags="-funcalign=32" -o myapp main.go
とすると、myapp
の関数エントリが32バイトアラインメントされます。
Standard Library
testing/synctestパッケージ
並行処理コードのテストをサポートする新パッケージです。
以下の2つの関数が追加されました。
Go1.24で実験的に導入された時点ではRun
関数がありましたが、Test
関数に変更されました。
また、Test
関数はtesting.T
を第一引数に取るようになりました。こうすることで、t.Cleanup
やDoneチャネルをバブルと結びつけることができるようになりました。
-
Test
- 独立された「バブル」という仮想環境内でテスト関数を実行。バブル内では
time
パッケージの関数がフェイククロックで動作。
- 独立された「バブル」という仮想環境内でテスト関数を実行。バブル内では
-
Wait
- バブル内の全goroutineがブロックするまで待機。
func TestConcurrent(t *testing.T) {
synctest.Test(t, func() {
timer := time.NewTimer(5 * time.Second)
// 実際の5秒待機は不要
})
}
encoding/json/v2パッケージ
GOEXPERIMENT=jsonv2
で有効化できる新しいJSON実装です。
有効化すると以下のようなパッケージが利用可能になります。
-
encoding/json/v2
→既存のencoding/json
の大幅改訂版です。 -
encoding/json/jsontext
→このパッケージは、JSONの文法に基づいた純粋な構文処理を提供します。Goのリフレクションに依存せず、より低レベルな処理を扱いますが、ほとんどのユーザーは直接使用しないとされています。
特徴としては以下があります。
- 既存の
encoding/json
パッケージもGOEXPERIMENT=jsonv2
が設定されている場合、内部的にこの新しいencoding/json/v2
の実装を使用するようになります。 - 既存の
encoding/json
パッケージのAPIと動作は、新しいオプションを追加する場合を除き、変更されません。 - 多数の新しい設定オプションが追加されます。例えば、
OmitZeroStructFields
、FormatNilMapAsNull
、MatchCaseInsensitiveNames
などがあります。 -
MarshalerTo
およびUnmarshalerFrom
は、ストリーミング処理を可能にし、パフォーマンスの向上が期待できます。 - 既存の
encoding/json
に比べて、エンコーディング性能は同等、デコーディングは高速化されています。
詳細なベンチマークはgithub.com/go-json-experiment/jsonbenchで確認できます。
archive/tar
Writer.AddFS
がio/fs.ReadLinkFS
を実装するファイルシステムに対してシンボリックリンクをサポートします。
この変更により、ファイルシステム全体をtarアーカイブに追加する際、シンボリックリンクも正しく保持されるようになりました。これは、io/fs.ReadLinkFS
インターフェースの導入と連携した改善です。
crypto
新しいMessageSigner
インターフェースとSignMessage
関数が追加されます。
署名者が自身でメッセージをハッシュしたい場合は実装できます。これは、ハッシュ処理と署名が同じ暗号化モジュール内で実行されることを義務付けるFIPS 140-3の要件に直接対応しています。
crypto/ecdsa
低レベルエンコーディング関数が追加され、crypto/elliptic
やmath/big
を使用せずに操作できます。
-
ParseRawPrivateKey
- バイト列から秘密鍵を直接パース
-
ParseUncompressedPublicKey
- 非圧縮形式の公開鍵をパース
-
PrivateKey.Bytes
- 秘密鍵をバイト列として取得
-
PublicKey.Bytes
- 公開鍵をバイト列として取得
crypto/elliptic
一部のCurve
実装上の非公開でドキュメント化されていないInverse
とCombinedMult
メソッドが削除されます。
crypto/sha3
追加されたSHA3.Clone
メソッドがhash.Cloner
を実装します。
crypto/tls
以下の追加、変更がされます。
-
ConnectionState.CurveID
- 接続確立に使用されたキー交換メカニズムを公開
-
Config.GetEncryptedClientHelloKeys
- Encrypted Client Hello拡張のサーバー設定用コールバック
-
SHA-1署名アルゴリズムがTLS 1.2で非推奨に(GODEBUG=tlssha1=1で再有効化可能)
-
FIPS 140-3モードでは、TLS 1.2でExtended Master Secretが必須、Ed25519とX25519MLKEM768が許可します。
-
TLSサーバーが最も高いサポートプロトコルバージョンを優先します。
-
TLSクライアントとサーバーの両方が、仕様により厳格に準拠し、仕様外の動作を拒否するようになりました。
これらの変更は、脆弱なアルゴリズムを段階的に廃止し、より堅牢で予測可能な動作への移行を示しています。
crypto/x509
以下の変更がされます。
-
CreateCertificate
、CreateCertificateRequest
、CreateRevocationList
がcrypto.MessageSigner
もサポート -
CreateCertificate
がSubjectKeyId
欠落時に切り詰められたSHA-256を使用(x509sha256skid=0
でSHA-1に戻せる)
debug/elf
RISC-V ELF解析用の新定数が追加されます。
PT_RISCV_ATTRIBUTES
SHT_RISCV_ATTRIBUTES
これらは、RISC-V アーキテクチャ固有の属性情報を含むセクションやセグメントを識別するために使用されます。GoのツールにおけるRISC-Vアーキテクチャへの継続的なサポートを示しています。
go/ast
以下が非推奨になります。
-
FilterPackage
、PackageExports
、MergePackageFiles
関数 -
MergeMode
型とその定数
新しい機能としては、PreorderStack
関数は、Inspect
と同様に構文ツリーを走査し、各ポイントで囲むノードのスタックを提供します。
go/parser
ParseDir
関数が非推奨になります。
この関数は、go:buildタグやファイル名から派生したビルドタグを尊重しないため、信頼性が低いと見なされています。ディレクトリの解析とビルドタグの管理には、packages.Load
が推奨される代替手段です。
go/token
追加されたFileSet.AddExistingFiles
メソッドにより、既存のFile
をFileSet
に追加でき、長期実行アプリケーションでの単一グローバルFileSet
の問題を軽減します。
go/types
以下が追加されます。
-
Var.Kind
メソッド- 変数をパッケージレベル、レシーバ、パラメータ、結果、ローカル変数、構造体フィールドとして分類
-
LookupSelection
関数-
LookupFieldOrMethod
と同様ですが、結果をSelection
形式で返します。
-
hash
以下が追加されます。
- 新しい
XOF
インターフェース- SHAKEのような拡張可能な出力関数用
- 新しい
Cloner
インターフェース- 状態のコピーを返すハッシュ用(全標準ライブラリの
Hash
実装が対応)
- 状態のコピーを返すハッシュ用(全標準ライブラリの
hash/maphash
新しいHash.Clone
メソッドがhash.Cloner
を実装します。
これにより、ハッシュ計算の途中状態を保存・復元できるようになります。
io/fs
追加されたReadLinkFS
インターフェースがファイルシステムでのシンボリックリンク読み取り機能を提供します。
log/slog
以下が追加されます。
-
GroupAttrs
-
Attr
値のスライスからグループAttr
を作成
userAttrs := slog.GroupAttrs("user", slog.String("id", "12345"), slog.String("name", "Alice"), slog.Int("age", 30), ) slog.Info("ユーザー情報", userAttrs)
-
-
Record.Source
メソッド- ソースロケーションを返す(利用可能な場合)
mime/multipart
追加されたFieldContentDisposition
ヘルパー関数がマルチパートのContent-Dispositionヘッダーフィールドを構築します。
// Content-Dispositionヘッダーの構築
header := multipart.FieldContentDisposition("form-data", "file", "example.txt")
// 結果: form-data; name="file"; filename="example.txt"
net
以下が追加されます。
-
LookupMX
とResolver.LookupMX
- 有効なIPアドレスに見えるDNS名も返すように変更されました。
Windows対応として以下の変更が行われます。
-
ListenMulticastUDP
がIPv6アドレスをサポートします。 -
os.File
とネットワーク接続間の変換をサポートします。(FileConn
、FilePacketConn
、FileListener
等)
net/http
追加されたCrossOriginProtection
がCSRF攻撃に対する保護を実装します。
- モダンなブラウザのFetchメタデータを利用します。
- トークンやクッキー不要です。
- オリジンベースおよびパターンベースのバイパスをサポートします。
例えば以下のように使います。
mux := http.NewServeMux()
p := http.NewCrossOriginProtection()
p.AddTrustedOrigin("https://myapp.com")
p.AddTrustedOrigin("https://*.partner.com")
srv := http.Server{
Addr: ":8080",
Handler: p.Handler(mux),
}
srv.ListenAndServe()
os
Windows非同期I/Oサポート
NewFile
が非同期I/O用ハンドル(syscall.FILE_FLAG_OVERLAPPED
)をサポートします。
- I/OメソッドがOSスレッドをブロックしないようになりました。
- デッドラインメソッドがサポートされるようになりました。
- 名前付きパイプ通信するアプリケーションで特に有益です。
シンボリックリンクサポート強化
-
DirFS
とRoot.FS
がio/fs.ReadLinkFS
インターフェースを実装します。 -
CopyFS
がio/fs.ReadLinkFS
実装ファイルシステムのシンボリックリンクをサポートします。
Root型の新メソッド
Root型に多くの新メソッドが追加されました。
- ファイル操作
Root.Chmod
、Root.Chown
、Root.Chtimes
- リンク操作
Root.Lchown
、Root.Link
、Root.Symlink
、Root.Readlink
- ディレクトリ操作
Root.MkdirAll
、Root.RemoveAll
- ファイルI/O
Root.ReadFile
、Root.WriteFile
- その他
Root.Rename
reflect
追加されたTypeAssert
関数により、Value
を直接指定したGo型に変換でき、不要なメモリ割り当てを回避します。
regexp/syntax
\p{name}
と\P{name}
文字クラス構文が以下をサポートするようになりました。
-
Any
、ASCII
、Assigned
、Cn
、LC
- Unicodeカテゴリエイリアス(例:
\p{Letter}
) - 大文字小文字を区別しない名前検索
- スペース、アンダースコア、ハイフンを無視
runtime
以下の変更がされました。
-
AddCleanup
でスケジュールされたクリーンアップ関数が並行・並列実行されるようになりました。 -
GODEBUG=checkfinalizers=1
を設定することで、ファイナライザとクリーンアップの一般的な問題を診断します。 -
SetDefaultGOMAXPROCS
関数が追加され、それを呼び出すことで、GOMAXPROCS
をランタイムデフォルト値に設定します。
runtime/pprof
ランタイム内部ロックの競合に関するミューテックスプロファイルが、遅延の原因となったクリティカルセクションの終了点を正しく指すように修正されます。
runtimecontentionstacks
GODEBUG設定は削除されました。
runtime/trace
追加されたFlightRecorder
が軽量な実行トレースキャプチャを提供します。
fr := trace.NewFlightRecorder(trace.FlightRecorderConfig{
MinAge: time.Millisecond,
MaxBytes: 16,
})
if criticalEvent {
var buf bytes.Buffer
fr.WriteTo(&buf)
// トレースデータを保存・分析
}
FlightRecorderConfig
で時間とデータ量を設定可能です。
sync
追加されたWaitGroup.Go
メソッドがgoroutineの作成とカウントのパターンを簡潔にします。
// 従来
wg.Add(1)
go func() {
defer wg.Done()
// 処理
}()
// Go 1.25
wg.Go(func() {
// 処理
})
この追加により、goroutineリークのリスクが減少し、コードの可読性が向上します。
testing
以下がの追加、変更がされました。
-
T.Attr
、B.Attr
、F.Attr
- テストログに属性を出力します。
-
T.Output
、B.Output
、F.Output
- ファイルと行番号を省略された、
t.Log
と同じストリームに対するio.Writer
を提供します。
例えば、以下のように使います。
func TestWithCustomOutput(t *testing.T) { // ファイル名・行番号なしのログ出力 writer := t.Output() // JSONログを出力 encoder := json.NewEncoder(writer) encoder.Encode(map[string]interface{}{ "test": "TestWithCustomOutput", "timestamp": time.Now(), }) }
- ファイルと行番号を省略された、
-
AllocsPerRun
- 並行テスト実行中にパニックするように変更されました。
testing/fstest
以下の変更がされます。
-
MapFS
がio/fs.ReadLinkFS
インターフェースを実装します。 -
TestFS
がio/fs.ReadLinkFS
機能を検証します。 -
TestFS
が無限に再帰探索を行うことを防ぐため、シンボリックリンクを追跡しないようになりました。
unicode
以下の変更がされます。
- 追加された
CategoryAliases
マップがカテゴリエイリアス名へのアクセスを提供します。例えば、"Letter"→"L" など。 - 新カテゴリ
Cn
(未割り当てコードポイント)とLC
(大文字小文字を持つ文字)が追加されました。 -
C
カテゴリがCn
を含むように変更されました。
unique
以下の改善がされました。
- インターンされた値の再利用がより積極的、効率的、並列的に実行されるようになりました。
- ユニークな値がインターンされる場合のメモリ消費増大が抑制されます。
-
Handle
を含む値が単一のGCサイクルで迅速に収集されます。
Ports
Darwin
Go 1.24リリースノートで発表済みの通り、Go 1.25はmacOS 12 Monterey以降を必要とし、以前のバージョンのサポートは終了します。
Windows
Go 1.25は壊れている32-bit windows/arm
ポート(GOOS=windows GOARCH=arm
)を含む最後のリリースです。Go 1.26で削除予定です。
Loong64
linux/loong64ポートは、race detector、runtime.SetCgoTracebackを使用したCコードからのトレースバック情報の収集、および内部リンクモードでのcgoプログラムのリンクをサポートするようになりました。
RISC-V
以下の変更がされました。
-
linux/riscv64
ポートがplugin
ビルドモードをサポート。 -
GORISCV64
環境変数は、RVA23U64ユーザーモードアプリケーションプロファイルを選択する新しい値rva23u64
を受け入れるようになりました。
Discussion