golang の次のチュートリアル コラムでは、go 言語でルーン文字の長さを取得する方法を紹介します。
Rune は Go 言語の特殊なデータ型です。int32 のエイリアスであり、ほぼすべての点で int32 と同等です。文字値と整数値を区別するために使用されます。公式の説明は次のとおりです。次のように:// rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. //int32的别名,几乎在所有方面等同于int32 //它用来区分字符值和整数值 type rune = int32例を見てみましょう:
package mainimport "fmt"func main() { var str = "hello 你好啊" fmt.Println("len(str):", len(str))}結果を推測してみましょう、hello には 5 文字、スペース 1 文字、漢字 3 文字があり、合計 9 文字になるはずです。長さは 9 ですが、実行してみましょう。 #出力された結果は 15 です。これはなぜですか?
golang の文字列の最下層は、バイト配列を通じて実装されます。中国語の文字は、unicode では 2 バイト、utf-8 エンコードでは 3 バイトを占め、golang のデフォルトのエンコードは正確に utf-8 です。したがって、計算された長さは 5 1 3*3=15
に等しいです。基礎となるバイト数ではなく文字列の長さを計算する必要がある場合は、次のメソッドを使用できます。 :
package main import ( "fmt" "unicode/utf8" ) func main() { var str = "hello 你好啊" //golang中string底层是通过byte数组实现的,座椅直接求len 实际是在按字节长度计算 所以一个汉字占3个字节算了3个长度 fmt.Println("len(str):", len(str)) // 15 //以下两种都可以得到str的字符串长度 //1、golang中的unicode/utf8包提供了用utf-8获取长度的方法 fmt.Println("RuneCountInString:", utf8.RuneCountInString(str)) //2、通过rune类型处理unicode字符 fmt.Println("rune:", len([]rune(str))) }実行結果は次のとおりです:
// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is // used, by convention, to distinguish byte values from 8-bit unsigned // integer values. type byte = uint8
以上がGo言語でルーン文字の長さを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。