😎

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に言及しないように更新されました。

https://github.com/golang/go/issues/70128

Tools

Go command

AddressSanitizerのリーク検出がデフォルトで有効化

go build -asanオプションを使用してビルドした場合、プログラム終了時のメモリリーク検出がデフォルトで有効になります。Cで確保されたメモリが解放されず、かつGoやCの他のメモリから参照されていない場合に「リーク」として報告される仕組みです。
cgo を利用して C のライブラリを呼び出しているようなケースで特に有効です。

ASAN_OPTIONS=detect_leaks=0 を環境変数に設定することで、この報告を無効にできます。

https://github.com/golang/go/issues/67833

プリビルドツールバイナリの削減

Goディストリビューションに含まれるプリビルドツールバイナリが削減されます。

これまでの Go のディストリビューションには、go docgo fix といった各種ツールが事前にバイナリとして含まれていました。
Go 1.25 からは、コンパイラやリンカなどのコアツールチェインのみをプリビルド提供し、他のツールは含めません。
ビルドやテスト操作で直接呼び出されないツールはgo toolによって初回使用時にビルドされる仕組みになりました。

https://github.com/golang/go/issues/71867

go.mod ignoreディレクティブ

go.mod ファイルに ignore ディレクティブを追加することで、goコマンドが特定のディレクトリを無視するように指定できます。
これにより、all./... などのパッケージパターンにマッチする際に、指定されたディレクトリとそのサブディレクトリ内のファイルが無視されます。

https://github.com/golang/go/issues/42965

go doc -httpオプション

go doc -http オプションを使用すると、指定されたオブジェクトのドキュメントを表示するドキュメントサーバーが起動し、ブラウザでドキュメントが開かれます。
例えば、go doc -http net/http と実行すると、net/http パッケージのドキュメントがブラウザで開きます。

https://github.com/golang/go/issues/68106

go version -m -jsonオプション

Goバイナリに埋め込まれたruntime/debug.BuildInfo構造体をJSON形式で出力します。
runtime/debug.BuildInfoには、バイナリがビルドされた際のGoのバージョン、mainパッケージのパス、依存モジュールなどの情報が含まれています。
https://pkg.go.dev/debug/buildinfo

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リポジトリから取得します。

https://go.dev/ref/mod#vcs-find

https://github.com/golang/go/issues/34055

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を実行できるようになります。

https://github.com/golang/go/issues/71294

toolchain行の自動追加廃止

go.modgo.workファイルのgo行を更新する際、コマンドの現在のバージョンを指定するtoolchain行が自動的に追加されなくなります。

https://github.com/golang/go/issues/65847

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()
}()

https://github.com/golang/go/issues/18022

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))

https://github.com/golang/go/issues/28308

Runtime

コンテナ対応GOMAXPROCS

GOMAXPROCSのデフォルト動作が変わります。

  1. デフォルト値の算出ロジック

    • cgroupのCPU帯域制限を考慮し、利用可能な論理CPU数とcgroupのCPU制限(厳密には最低でも2)の低い方をGOMAXPROCSのデフォルト値とする。cgroupのCPU制限はKubernetesの「CPU limit」に対応するが、「CPU requests」は考慮されない。
  2. 定期的な更新

    • 利用可能な論理CPU数やcgroup CPU帯域制限が変更された場合、ランタイムが定期的にGOMAXPROCSを更新する。

また、これらの動作はGOMAXPROCSを環境変数から手動で設定したり、runtime.GOMAXPROCSを呼び出して設定することで、無効にできます。

これを再び有効にするには、SetDefaultGOMAXPROCS関数を呼び出すことで、有効にできます。

https://github.com/golang/go/issues/73193

Garbage Collector

オブジェクトのマーキングとスキャン性能を改善するGreenTeaGCというものが実験的に導入されます。

既存のGCには以下のような課題がありました。

  • 不均一なメモリ構造に対する適応性が低い.
  • 空間的局所性の問題(メモリの異なる部分にアクセス等)
  • 時間的局所性の問題(同じメモリへの繰り返しアクセス等)

これらを解決するために、GreenTeaGCでは個々のオブジェクトではなくて、連続したブロック単位でメモリをスキャンするような構造になっています。

以下のようにGOEXPERIMENT=greenteagcを設定することで有効化できます。

GOEXPERIMENT=greenteagc go build -o myapp .

ベンチマーク結果は様々ですが、GCを多用する実際のプログラムで10〜40%のGCオーバーヘッド削減が期待されます。
設計は今後も進化する予定で、issueでフィードバックを募集しています。

https://github.com/golang/go/issues/73581

panic output

panicがリカバリされ、再び同じ値でpanicになった場合のメッセージが変更されます。

# これまで
panic: PANIC [recovered]
  panic: PANIC

# Go 1.25
panic: PANIC [recovered, repanicked]

https://github.com/golang/go/issues/71517

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]/mapssmaps に用途が出力され、メモリの調査やデバッグがしやすくなります。

GODEBUGdecoratemappings=0を設定すると無効化できます

https://github.com/golang/go/issues/71546

Compiler

DWARF v5

デバッグ情報の生成にDWARFバージョン5を使用するようになり、デバッグ情報のサイズ削減によるバイナリサイズの縮小、リンク時間の短縮等が期待されます。
また、DWARF v5 はより構造化された情報を提供するため、gdb/lldb などのツールでの変数表示・スタックトレースなどが改善される可能性があります。

DWARF(ドワーフ)は初めて聞いたのですが、プログラムのデバッグ情報を表現するための標準フォーマットらしいです。

https://github.com/golang/go/issues/26379

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ではコンパイラのバグで正常に動作していましたが、仕様に反していたためパニックを起こすように修正されました。

https://github.com/golang/go/issues/72860

スタック上のスライス割り当て改善

Go 1.25では、コンパイラのエスケープ分析がさらに強化され、特に make([]T, n) によるスライスの元となる配列が、より多くのケースでヒープではなくスタックに配置されるようになりました。これによってパフォーマンスの向上が期待できます。

ただし、スタックに置かれる寿命が短くなるため、不適切に unsafe.Pointer を使う場合に、予期しないライフタイムの短縮によりバグやクラッシュが発生する可能性があります。

この場合に、bisectツールを-compile=variablemakeフラグと共に使用することで、問題を引き起こしているスタック割り当て箇所を特定することが可能です。

https://github.com/golang/go/issues/73253

Linker

新しい-funcalign=Nコマンドラインオプションが追加され、関数エントリのアラインメントを指定できます。デフォルト値はプラットフォーム依存で、このリリースでは変更ありません。
特定のハードウェアアーキテクチャやパフォーマンス要件に合わせて、関数のメモリアラインメントを調整できるようにするためのオプションです。

例えば、

go build -ldflags="-funcalign=32" -o myapp main.go

とすると、myappの関数エントリが32バイトアラインメントされます。

https://github.com/golang/go/issues/72130

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秒待機は不要
    })
}

https://github.com/golang/go/issues/73567

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と動作は、新しいオプションを追加する場合を除き、変更されません。
  • 多数の新しい設定オプションが追加されます。例えば、OmitZeroStructFieldsFormatNilMapAsNullMatchCaseInsensitiveNamesなどがあります。
  • MarshalerToおよびUnmarshalerFromは、ストリーミング処理を可能にし、パフォーマンスの向上が期待できます。
  • 既存のencoding/jsonに比べて、エンコーディング性能は同等、デコーディングは高速化されています。

詳細なベンチマークはgithub.com/go-json-experiment/jsonbenchで確認できます。

https://github.com/golang/go/issues/71497

https://github.com/golang/go/issues/71845

archive/tar

Writer.AddFSio/fs.ReadLinkFSを実装するファイルシステムに対してシンボリックリンクをサポートします。
この変更により、ファイルシステム全体をtarアーカイブに追加する際、シンボリックリンクも正しく保持されるようになりました。これは、io/fs.ReadLinkFSインターフェースの導入と連携した改善です。

crypto

新しいMessageSignerインターフェースとSignMessage関数が追加されます。
署名者が自身でメッセージをハッシュしたい場合は実装できます。これは、ハッシュ処理と署名が同じ暗号化モジュール内で実行されることを義務付けるFIPS 140-3の要件に直接対応しています。

crypto/ecdsa

低レベルエンコーディング関数が追加され、crypto/ellipticmath/bigを使用せずに操作できます。

  • ParseRawPrivateKey
    • バイト列から秘密鍵を直接パース
  • ParseUncompressedPublicKey
    • 非圧縮形式の公開鍵をパース
  • PrivateKey.Bytes
    • 秘密鍵をバイト列として取得
  • PublicKey.Bytes
    • 公開鍵をバイト列として取得

crypto/elliptic

一部のCurve実装上の非公開でドキュメント化されていないInverseCombinedMultメソッドが削除されます。

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

以下の変更がされます。

  • CreateCertificateCreateCertificateRequestCreateRevocationListcrypto.MessageSignerもサポート
  • CreateCertificateSubjectKeyId欠落時に切り詰められたSHA-256を使用(x509sha256skid=0でSHA-1に戻せる)

debug/elf

RISC-V ELF解析用の新定数が追加されます。

  • PT_RISCV_ATTRIBUTES
  • SHT_RISCV_ATTRIBUTES

これらは、RISC-V アーキテクチャ固有の属性情報を含むセクションやセグメントを識別するために使用されます。GoのツールにおけるRISC-Vアーキテクチャへの継続的なサポートを示しています。

go/ast

以下が非推奨になります。

  • FilterPackagePackageExportsMergePackageFiles関数
  • MergeMode型とその定数

新しい機能としては、PreorderStack関数は、Inspectと同様に構文ツリーを走査し、各ポイントで囲むノードのスタックを提供します。

go/parser

ParseDir関数が非推奨になります。
この関数は、go:buildタグやファイル名から派生したビルドタグを尊重しないため、信頼性が低いと見なされています。ディレクトリの解析とビルドタグの管理には、packages.Loadが推奨される代替手段です。

go/token

追加されたFileSet.AddExistingFilesメソッドにより、既存のFileFileSetに追加でき、長期実行アプリケーションでの単一グローバル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

以下が追加されます。

  • LookupMXResolver.LookupMX
    • 有効なIPアドレスに見えるDNS名も返すように変更されました。

Windows対応として以下の変更が行われます。

  • ListenMulticastUDPがIPv6アドレスをサポートします。
  • os.Fileとネットワーク接続間の変換をサポートします。(FileConnFilePacketConnFileListener等)

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スレッドをブロックしないようになりました。
  • デッドラインメソッドがサポートされるようになりました。
  • 名前付きパイプ通信するアプリケーションで特に有益です。

シンボリックリンクサポート強化

  • DirFSRoot.FSio/fs.ReadLinkFSインターフェースを実装します。
  • CopyFSio/fs.ReadLinkFS実装ファイルシステムのシンボリックリンクをサポートします。

Root型の新メソッド

Root型に多くの新メソッドが追加されました。

  • ファイル操作
    Root.ChmodRoot.ChownRoot.Chtimes
  • リンク操作
    Root.LchownRoot.LinkRoot.SymlinkRoot.Readlink
  • ディレクトリ操作
    Root.MkdirAllRoot.RemoveAll
  • ファイルI/O
    Root.ReadFileRoot.WriteFile
  • その他
    Root.Rename

reflect

追加されたTypeAssert関数により、Valueを直接指定したGo型に変換でき、不要なメモリ割り当てを回避します。

regexp/syntax

\p{name}\P{name}文字クラス構文が以下をサポートするようになりました。

  • AnyASCIIAssignedCnLC
  • 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.AttrB.AttrF.Attr
    • テストログに属性を出力します。
  • T.OutputB.OutputF.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

以下の変更がされます。

  • MapFSio/fs.ReadLinkFSインターフェースを実装します。
  • TestFSio/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