다음 튜토리얼 칼럼인 golang에서는 Go 언어에서 룬으로 문자 길이를 구하는 방법을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
rune은 Go 언어의 특수 데이터 유형으로 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에서 문자열의 맨 아래 레이어는 바이트 배열을 통해 구현됩니다. 한자는 유니코드에서 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))) }
Run 결과는 다음과 같습니다.
rune 정의 위에 또 다른 정의가 있습니다. 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
위 내용은 Go 언어에서 룬의 문자 길이를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!