Go 文字列のバイトやルーン文字にどのようにアクセスしますか?

Barbara Streisand
リリース: 2024-11-19 03:39:02
オリジナル
604 人が閲覧しました

How do you access bytes and runes in Go strings?

Go 文字列でのバイト アクセスと変換

Go では、文字列には文字やルーンではなく、UTF-8 でエンコードされたバイトが格納されます。 str[i] で示される文字列の要素にアクセスすると、ルーンに変換されるのではなく、バイト (byte または uint8) が返されます。

for ... range 構造を使用して文字列を反復処理する場合、バイトまたはルーンのいずれかにアクセスできます。文字列のインデックス付け (str[i] など) はバイトに直接アクセスしますが、変換なしのループ (for i := range str) はルーンを反復処理します。

パフォーマンスに関する考慮事項

[]byte(str) を使用して文字列をバイト スライスに変換しても、実際のコピーは実行されません。最適化されてなくなります。したがって、次の 2 つのメソッドの間にパフォーマンスの違いはありません:

str := "large text"
for i := range str {
  // use str[i]
}
ログイン後にコピー
str := "large text"
str2 := []byte(str)
for _, s := range str2 {
  // use s
}
ログイン後にコピー

ただし、最大限のパフォーマンスとコードの明瞭さのために、コードの意図に一致するメソッドを使用することをお勧めします:

  • 特にバイトにアクセスする必要がある場合は、最初の方法を使用してバイトを反復します。
  • ルーンを反復します。文字にアクセスする必要がある場合は、2 番目の方法を使用します。

文字の反復

文字列内のルーン文字を反復する場合、マルチバイト文字に注意することが重要です。 Unicode 文字などの文字は、基礎となる UTF-8 エンコーディングで複数のバイトを使用して表現される場合があります。 for ... range str 構文はこれを自動的に処理し、各反復でバイト インデックスと文字 (ルーン) 値を返します。

追加リソース

  • [ The Go ブログ: 文字列、バイト、ルーン文字、および文字Go](https://blog.golang.org/strings)
  • [golang: []byte(string) vs []byte(*string)](https://go.dev/issue/ 22847)

以上がGo 文字列のバイトやルーン文字にどのようにアクセスしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート