-
rune
、byte
和string
都是Go
的内置类型
-
byte
-
byte是
uint8
的别名,在所有方面都等同于uint8
- 按惯例,它用于区分 字节值 和 8位无符号整数值 。
-
byte是
-
rune
-
rune
是int32
的别名,在所有方面都等同于int32
- 按惯例,它用于区分 字符值 和 整数值 。
-
-
string
- string是所有 8位字节字符串 的集合,通常但不一定代表UTF-8编码的文本
-
字符串可能为空,但是不能为
nil
- 字符串类型的值是不可变的
-
由上面得解释我们大概可以明白
-
rune
可以表示得比byte
多 -
string
类型的底层是一个byte
数组 -
以上解释都来此
Go
源码注释
-
- 刚刚上面标注了 字节 和 字符 ,现在我们来梳理字符和字节的概念
-
存储单位 字节
-
计算机存储信息的最小单位,称之为 位
bit
,二进制的一个0
或1
叫一位 -
计算机存储容量基本单位是 字节
Byte
,8个 二进制位 组成1
个字节
-
计算机存储信息的最小单位,称之为 位
-
信息表示单位 字符
-
字符
是一种符号,像 英文
a
和中文阿
就是不同字符 -
不同的字符在不同的编码格式下,所需要的存储单位不一样
-
ASCLII
编码中一个 英文字母一字节 ,一个 汉字两字节 -
UTF-8
编码中 一个 英文字母一字节 ,一个 常见汉字3字节 ,不常用的超大字符集汉字4字节
-
-
字符
是一种符号,像 英文
-
Go
源码文件默认采用Unicode
字符集,Unicode
码点和内存中字节序列的变换实现使用了UTF-8
,这使得Go
编程无需考虑编码转换的问题非常方便 -
从编码上来分析
-
byte
用来强调一个字节代表的数据(例如字符a
就是97
),而不是数字; -
rune
用来表示Unicode
的码点,即一个字符
-
-
通俗一点
byte rune
-
代码演示
package main import "fmt" func main() { str := "hello 世界!" fmt.Println(str) fmt.Println(len(str)) fmt.Println(str[1]) fmt.Println(string(str[1])) fmt.Println(str[1:]) fmt.Println(str[7:]) } ************************************* 输出 hello 世界! 13 101 e ello 世界! ��界!
-
会输出
hello 世界!
,这证明Go
是UTF-8
编码的,输出长度为13
这说明了一个汉字3字节 -
输出
ello 世界!
说明string
底层的数据结构是数组 -
输出
��界!
说明string
底层是一个byte
数组,不然不会乱码
package main import "fmt" func StrChangeByRune(str *string, i int, ch rune) { temp := []rune(*str) temp[i] = ch *str = string(temp) } func StrChangeByByte(str *string, i int, ch byte) { temp := []byte(*str) temp[i] = ch *str = string(temp) } func main() { str := "你好 hello" str1 := "你好 hello" StrChangeByRune(&str, 1, 'A') StrChangeByByte(&str1, 1, 'A') fmt.Println(str) fmt.Println(str1) } ******************************* 输出 你A hello �A�好 hello
-
由输出
你A hello
和�A�好 hello
可以看出 -
byte
的操作单位是一个字节,可以理解为一个英文字符 -
rune
的操作单位是一个字符,不管这个字符是什么字符
以上所述就是小编给大家介绍的《Go 的 rune byte 和 string》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Sprint
Jake Knapp、John Zeratsky、Braden Kowitz / Simon & Schuster / 2016-3-8 / GBP 14.60
媒体推荐 “Every business leader I know worries about the same thing: Are we moving fast enough? The genius of Jake Knapp’s Sprint is its step-by-step breakdown of what it takes to solve big problems an......一起来看看 《Sprint》 这本书的介绍吧!