Go/rune
表示
< Go
Goのruneについて
[編集]Goにおける rune は、Unicodeの1文字を表すint32型の別名です。Goの文字列はUTF-8でエンコードされたバイト列であり、マルチバイトの文字(たとえば日本語や絵文字)も含まれるため、文字(=Unicodeコードポイント)単位の処理を行う際には rune 型が重要です。
基本情報
[編集]runeはint32のエイリアス(実体はint32)- Unicodeのコードポイント(1文字)を表す
- Go文字列はUTF-8エンコードのバイト列なので、1文字≠1バイト
rune型はfor range文や[]runeでよく使われる
他のキーワードとの組み合わせ
[編集]変数宣言との組み合わせ
[編集]var ch rune = '界' letter := 'A' // 型は rune
※ シングルクォート ' を使うと rune リテラル(Unicode 1文字)
定数定義との組み合わせ
[編集]const Alpha rune = 'α' const Tab = '\t' const Smile = '😄'
関数パラメータと戻り値
[編集]func IsHiragana(r rune) bool { return r >= 'ぁ' && r <= 'ん' } func ToRune(s string) rune { r, _ := utf8.DecodeRuneInString(s) return r }
型変換
[編集]s := string('あ') // rune → string(1文字) code := int32('あ') // rune → int32(数値としてのコードポイント) r := rune(65) // int → rune('A') s2 := string([]rune{'こ', 'ん', 'に', 'ち', 'は'}) // rune配列 → string
配列とスライス
[編集]s := "こんにちは" runes := []rune(s) // 文字列 → runeスライス(文字単位で扱える) runes[0] = 'さ' s2 := string(runes) // runeスライス → 文字列
マップ
[編集]count := map[rune]int{} for _, r := range "ごんぎつね" { count[r]++ }
構造体のフィールド
[編集]type Token struct { Char rune Pos int } type TrieNode struct { Value rune Next map[rune]*TrieNode }
バイト処理・UTF-8との組み合わせ
[編集]import "unicode/utf8" func RuneCount(s string) int { return utf8.RuneCountInString(s) } func FirstRune(s string) rune { r, _ := utf8.DecodeRuneInString(s) return r } func EncodeRune(r rune) []byte { buf := make([]byte, utf8.RuneLen(r)) utf8.EncodeRune(buf, r) return buf }
エスケープ・リテラル
[編集]a := 'あ' // 1文字のruneリテラル newline := '\n' // 制御文字 quote := '\'' // エスケープされたシングルクォート // 数値でruneを指定 code := rune(0x3042) // → 'あ'
一般的なユースケース
[編集]- 文字列を1文字ずつ処理
s := "日本語" for _, r := range s { fmt.Printf("%c %U\n", r, r) }
- 文字の種類を判別(unicodeパッケージ)
import "unicode" func IsLetterOrDigit(r rune) bool { return unicode.IsLetter(r) || unicode.IsDigit(r) }
- rune単位での置換
func ReplaceAtoB(s string) string { runes := []rune(s) for i, r := range runes { if r == 'あ' { runes[i] = 'い' } } return string(runes) }
rune 型は、Goで文字を正確に扱うための基本的な型です。文字列はUTF-8のバイト列であり、バイト単位では正しく1文字を処理できないことがあるため、runeを使うことで正しいUnicode処理が可能になります。rune 型を活用することで、国際化対応や日本語・絵文字の扱いも含めた堅牢な文字列処理が実現できます。