DUICUO

Golang の Rune 型とは何でしょうか?

ルーンの種類

オープンソースプロジェクトのソースコードをレビューしていると、`rune`型によく遭遇します。この記事では、`rune`型について詳しく説明します。まず、Goのソースコード内のコメントを見てみましょう。

 // runeはint32の別名であり、あらゆる点でint32と同等です。
// 慣例により、文字値と整数値を区別するために使用されます。
ルーン= int32

ご覧のとおり、ルーン型はint32型の別名であり、int32と同等です。ルーン型は、文字値と整数値を区別するために慣習的に使用されているため定義されました。ルーン型は通常、Unicode文字のコードポイント、つまりUnicodeにおける文字エンコーディングを表すために使用され、Unicodeの1,114,112個のコードポイントをサポートしています。

使い方

一重引用符を使用して、rune 型の変数を定義できます。次に例を示します。

 var r1ルーン= 'A'
var r2 rune = 'あなた'
var r3 rune = '\U0001F600' // スマイリーフェイス絵文字のUnicodeコードポイントはU+1F600です

%c を使用して、rune 型の変数をフォーマットできます。次に例を示します。

 fmt.Printf (" r1 : %c\n" , r1 ) // 出力: r1: A
fmt.Printf (" r2 : %c\n" , r2 ) // 出力: r2: You
fmt.Printf (" r3 : %c\n" , r3 ) // 出力: r3:

文字列でルーン型を使用すると、Unicode 文字を表すことができます。次に例を示します。

 str : = "こんにちは、世界!"
r : = []ルーン( str )
fmt.Printf ( "%c\n" , r [ 0 ]) // 出力:

`rune` は 32 ビット整数なので、`rune` 変数を `int` 変数に割り当てるときには型変換が必要です。

 var rルーン= 'A'
var i int = int ( r )

文字列の長さを計算する

ご存知の通り、中国語の文字はUnicodeでは2バイト、UTF-8では3バイトを占有します。GoのデフォルトのエンコーディングはUTF-8です。文字列のバイト長ではなく長さを取得したい場合は、`rune`型を使用する必要があります。

パッケージメイン

輸入
「fmt」
「ユニコード/utf8」


関数main (){
var str = "こんにちは、世界"
// 使用されたバイト数を計算する
fmt.Println ( "バイト数:" , len ( str ))

次の 2 つの方法はどちらも文字列内の文字数を取得できます。
unicode/utf8 パッケージは、文字数を取得するためのメソッドを提供します。
fmt.Println ( "文字数:" , utf8.RuneCountInString ( str ) )
// ルーン型を使用してUnicode文字を処理するメソッド
fmt.Println ( "文字数:" , len ([] rune ( str )))
}

出力結果:

バイト数: 12
文字数: 8
文字数: 8