ホームページ  >  記事  >  バックエンド開発  >  Go言語でルーン文字の長さを取得する方法

Go言語でルーン文字の長さを取得する方法

藏色散人
藏色散人転載
2021-06-09 15:05:132703ブラウズ

golang の次のチュートリアル コラムでは、go 言語でルーン文字の長さを取得する方法を紹介します。

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 ですが、実行してみましょう。

Go言語でルーン文字の長さを取得する方法

#出力された結果は 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)))
}

実行結果は次のとおりです:


Go言語でルーン文字の長さを取得する方法

ルーン定義の上に別のものがあり、byte = uint8

// 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

    byte int8 と同等であり、通常は ASCII 文字の処理に使用されます。
  • rune は int32 と同等で、通常は Unicode または utf-8 文字の処理に使用されます

以上がGo言語でルーン文字の長さを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。