メインコンテンツへスキップ

Go Proposal Weekly Digest

Go言語のproposal更新を毎週お届け

挙動変更

unicodeパッケージおよび関連機能がUnicode 15からUnicode 17へ更新され、Todhriなど新規スクリプトを含む最新の文字集合に対応した。

unicode

この項目の注釈は AI により生成されており、誤りを含む場合があります。
使用例のコンパイル検証: 検証済み

概要

unicode パッケージおよびシステム全体の関連機能が、Unicode 15 から Unicode 17 へアップグレードされた。変更内容の詳細は Unicode 16.0.0 および Unicode 17.0.0 のリリースノートを参照。

導入経緯

Issue #77266("all: update to Unicode 17")で追跡された。作業は複数のCL(CL 737400CL 737401CL 737402CL 737404CL 737420)に分割して実装され、全て提出済みであることが確認された上でクローズされた。

議論のハイライト

  • 一連のCLはテーブル更新(CL 737404CL 737420)だけでなく、unicode/norm のパック済み forminfo における QC (Quick Check) Maybe ビットの保持修正(CL 737400)や idna 関連の実装更新・旧コード削除(CL 737402CL 737401)など、周辺実装の整合性確保にも及んだ。
  • 全CL提出後、コアチームメンバーから「残作業はあるか」との確認が入り、「All done!」の返信を受けてクローズに至った。

使用例

Before

package main

import (
	"fmt"
	"unicode"
)

func main() {
	fmt.Println(unicode.Version) // Go 1.26以前: "15.0.0"
}

After

package main

import (
	"fmt"
	"unicode"
)

func main() {
	fmt.Println(unicode.Version) // "17.0.0"
}

移行時の注意

Unicode 16.0では Todhri・Garay・Gurung Khema・Kirat Rai・Ol Onal・Sunuwar・Tulu-Tigalari など新規スクリプトが追加されており、unicode.Scripts にもこれらのテーブルが加わった。既存コードが unicode.Isunicode.IsLetter などで未知のコードポイントを一律「非対応」として扱っていた場合、これらの新規スクリプトの文字が新たに認識されるようになる点に注意。また既存の文字であっても分類(カテゴリ・大文字小文字変換・正規化結果など)が変わる場合があるため、Unicodeプロパティに依存した比較・ソート・正規化を行うコードは出力差分がないか確認するとよい。

実装解説

unicode.Version 定数はUnicode 17.0.0を示す値に更新されている(src/unicode/tables.go;l=6)。また unicode.Scripts マップには、Unicode 16.0で追加された新規スクリプト(GarayGurung_KhemaKirat_RaiOl_OnalSunuwarTodhriTulu_Tigalari など)が新たなエントリとして加わっている(src/unicode/tables.go;l=5399)。

関連リンク