Go での文字列要素アクセス中の変換
Go では、文字列の要素にアクセスすると、ルーンとして表現されていてもバイト (uint8) が返されます。 (int32)。ただし、文字列に対して for ... range を使用する場合は、バイトではなくルーンを反復処理します。ここで疑問が生じます:
Go は文字列要素 (str[i]) に個別にアクセスするときに変換を実行しますか?
いいえ、str[i] へのアクセスには変換は必要ありません。文字列は実質的に読み取り専用のバイト スライスであり、インデックスを作成すると基になるバイトに直接アクセスします。
パフォーマンスに関する考慮事項
範囲の反復がバイトではなくルーンにアクセスすることを考慮して、比較してみましょう。 2 つのコード スニペットのパフォーマンス:
オプション A: 文字列の直接反復
str := "large text" for i := range str { // use str[i] }
オプション B: バイト スライスへの変換
str := "large text" str2 := []byte(str) for _, s := range str2 { // use s }
実際には、どちらのオプションにもコピーや変換は含まれません。 2 番目のオプションは、同じ基礎となるバイト スライスを反復処理する、より冗長な方法です。したがって、この 2 つの間にパフォーマンスの違いはありません。
優先メソッド
パフォーマンスの違いがない場合、優先メソッドは特定の要件によって異なります。
以上がGoは文字列要素に個別にアクセスするときにバイトをルーンに変換しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。