Go の文字列におけるルーン範囲とバイト範囲の違いを理解する
Go で range 句を使用して文字列を反復処理する際、次のことができます。ルーンとバイトという 2 つのデータ型が存在します。これは混乱を招く可能性があるため、これが発生する理由を詳しく調べてみましょう。
Go 言語の定義によれば、文字列はバイトのシーケンスであり、その個々の要素には str[index] を使用したインデックスによってアクセスできます。 。ただし、for range を使用して文字列をループすると、取得される文字は rune 型になります。
この区別は、文字列内のコード ポイント (Unicode 文字) の反復を許可する range 句の定義から生じます。 。各コード ポイントは、文字のエンコーディングに応じて 1 つ以上のバイトで構成されます。 range 句は、これらのコード ポイントの開始バイトを反復処理し、対応するルーン値をタプルの 2 番目の要素として提供します。
反復中に無効な UTF-8 シーケンスが見つかった場合、2 番目の値はUnicode 置換文字 (0xFFFD) を使用すると、反復子は 1 バイトずつ進みます。
文字列の個々のバイトを反復するには、次のコードを使用できます。代替案:
手動バイト ループ:
for i := 0; i < len(s); i++ { // Access the byte at position i in "s" }
バイトへの変換スライス:
for i, b := range []byte(s) { // Access both the index (i) and the byte (b) }
文字列のバイトを範囲指定することはあまり簡潔ではありませんが、特定のシナリオで必要となる生のバイト値へのアクセスを提供します。ルーン範囲とバイト範囲の違いを理解することで、Go で文字列を効果的に操作して必要な要件を満たすことができます。
以上がGo Strings: ルーンとバイトの反復: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。