ホームページ >バックエンド開発 >Golang >Go で文字列を範囲指定するとルーンが返されるのに、インデックス作成ではバイトが返されるのはなぜですか?

Go で文字列を範囲指定するとルーンが返されるのに、インデックス作成ではバイトが返されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-27 20:12:32618ブラウズ

Why Does Ranging Over a String in Go Return Runes, While Indexing Returns Bytes?

文字列にわたる範囲がインデックスごとのバイトのルーンを返す理由

Go のドキュメントと私たち自身のテストによると、文字列にわたる範囲の場合、取得された要素は rune 型ですが、str[index] を使用して文字列にインデックスを付けるとバイトが得られます。

この区別の主な理由は、文字列型の定義にあります。文字列は一連のバイトを表し、インデックスを作成することで個々のバイトにアクセスできます。

一方、range 句は for で使用されます。ステートメントを使用すると、文字列内の Unicode コード ポイントをトラバースできます。 0 バイト インデックスから開始して、この反復により、UTF-8 でエンコードされた各コード ポイントの最初のバイト インデックスと、対応するコード ポイント値 (ルーン タイプ) が返されます。

コードポイントではなく文字列内のバイトを反復処理したい場合は、いくつかのオプションがあります:

  • 通常の for ループを使用して、0 から 0 までのインデックスを反復処理します。 len(s)-1 。
  • for i, b := range []byte(s) を使用して文字列をバイト スライスに変換し、バイトを反復処理します。

これらの代替手段は、コードの可読性を犠牲にすることなくバイトへの直接アクセスを提供します。

以上がGo で文字列を範囲指定するとルーンが返されるのに、インデックス作成ではバイトが返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。