Golang字符类型 痛定思痛。 2021-07-24 12:37 502阅读 0赞 # 一 基本介绍 # Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存。 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而 Go 的字符串不同,它是由字节组成的。 1 如果我们保存的字符在 ASCII 表的,比如\[0-9, a-z,A-Z\],直接可以保存到 byte。 2 如果我们保存的字符对应码值大于 255,这时可以考虑使用 int 类型保存。 3 如果我们需要按照字符的方式输出,这时我们需要格式化输出,即 fmt.Printf(“%c”, c1)。 # 二 字符类型使用细节 # ## 1 字符常量是用单引号括起来的单个字符。 ## 示例 var c1 byte = 'a' var c2 int = '中' var c3 byte = '9' ## 2 Go 中允许使用转义字符 '\\’来将其后的字符转变为特殊字符型常量。 ## 示例 var c3 char = '\n' // '\n'表示换行符 ## 3 Go 语言的字符使用 UTF-8 编 码,如果想查询字符对应的 utf8 码值,可参考下面网站 ## [http://www.mytju.com/classcode/tools/encode\_utf8.asp][http_www.mytju.com_classcode_tools_encode_utf8.asp] 英文字母是1个字节,汉字是3个字节。 ## 4 在 Go 中,字符的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值。 ## ## 5 可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的 unicode 字符。 ## ## 6 字符类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码。 ## # 三 字符类型本质探讨 # ## 1 字符型存储到计算机中,需要将字符对应的码值(整数)找出来 ## 存储:字符 ---> 对应码值 ---> 二进制 ---> 存储 读取:二进制 ---> 码值 ---> 字符 ---> 读取 ## 2 字符和码值的对应关系是通过字符编码表决定的,是已经规定好的。 ## ## 3 Go 语言的编码都统一成了 utf-8。非常的方便,很统一,再也没有编码乱码的困扰了。 ## # 四 实战 # ## 1 代码 ## package main import ( "fmt" ) // 演示 golang 中字符类型使用 func main() { var c1 byte = 'a' var c2 byte = '0' // 字符的0 // 当直接输出 byte 值,就是输出了的对应的字符的码值 fmt.Println("c1=", c1) fmt.Println("c2=", c2) // 如果希望输出对应字符,需要使用格式化输出 fmt.Printf("c1=%c c2=%c\n", c1, c2) // var c3 byte = '北' // overflow溢出 var c3 int = '北' // 汉字用 int 存储 fmt.Printf("c3=%c c3对应码值=%d\n", c3, c3) // 可以直接给某个变量赋一个数字,然后按格式化输出 %c,会输出该数字对应的 unicode 字符 var c4 int = 22269 // 22269 -> '国' 120->'x' fmt.Printf("c4=%c\n", c4) // 字符类型是可以进行运算的,相当于一个整数,运算时是按照码值运算 var n1 = 10 + 'a' // 10 + 97 = 107 fmt.Println("n1=", n1) } ## 2 结果 ## c1= 97 c2= 48 c1=a c2=0 c3=北 c3对应码值=21271 c4=国 n1= 107 [http_www.mytju.com_classcode_tools_encode_utf8.asp]: http://www.mytju.com/classcode/tools/encode_utf8.asp
还没有评论,来说两句吧...