文字列にわたるルーンとバイト範囲の説明
Go で for ループを使用して文字列をトラバースするとき、次の矛盾に気づいたかもしれません。取得されるデータ型は、使用するアプローチに応じて異なります。 「for i, c := range s」の形式を使用して文字列を範囲指定するとルーン型が生成されますが、「s[i]」のような直接インデックスを使用するとバイト型が返されます。
この違いは、基礎となるものに起因します。 Go での文字列の定義。文字列をバイトのシーケンスとして指定します。 「s[i]」を使用して文字列にアクセスすると、インデックス i のバイト値が直接取得されます。ただし、「for range」を使用して文字列を反復処理する場合、range 句は、Go ではルーン文字として表される Unicode コード ポイントに対して動作します。
range がルーン文字に対して機能する理由は、慣用的な方法を提供するためです。 UTF-8 シーケンスを手動でデコードすることなく、文字列を反復処理します。 range がバイト単位でのみ機能する場合は、ルーンを走査するための独自のカスタム ループを作成する必要があります。
ただし、次のような手法を使用して文字列内のバイトにアクセスすることもできます。
for i := 0; i < len(s); i++ { ... }
または
for i, b := range []byte(s) { ... }
これらの代替メソッドを使用すると、次の場合にバイトを明示的に操作できる柔軟性が得られます。
要約すると、文字列に対する for-range 構造でルーンを使用すると、文字列の Unicode 表現を反復する便利な方法が提供されます。必要に応じて個々のバイトにアクセスすることはできますが、このアプローチによりプロセスが合理化され、Go での文字列の操作がより簡単かつ直感的になります。
以上がGo 文字列反復におけるルーンとバイト: ルーンはいつ取得され、バイトはいつ取得されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。