Go 的 rune byte 和 string

栏目: Go · 发布时间: 7年前

  • runebytestring 都是 Go 的内置类型
  • byte
    • byte是 uint8 的别名,在所有方面都等同于 uint8
    • 按惯例,它用于区分 字节值8位无符号整数值
  • rune
    • runeint32 的别名,在所有方面都等同于 int32
    • 按惯例,它用于区分 字符值整数值
  • string
    • string是所有 8位字节字符串 的集合,通常但不一定代表UTF-8编码的文本
    • 字符串可能为空,但是不能为 nil
    • 字符串类型的值是不可变的
  • 由上面得解释我们大概可以明白
    • rune 可以表示得比 byte
    • string 类型的底层是一个 byte 数组
    • 以上解释都来此 Go 源码注释
  • 刚刚上面标注了 字节字符 ,现在我们来梳理字符和字节的概念
  • 存储单位 字节

    • 计算机存储信息的最小单位,称之为 bit ,二进制的一个 01 叫一位
    • 计算机存储容量基本单位是 字节 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 世界! ,这证明 GoUTF-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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

重来2

重来2

[美] 贾森·弗里德、[美] 戴维·海涅迈尔·汉森 / 苏西 / 中信出版社 / 2014-4-8 / 39.00元

“不再需要办公室”,这不仅仅是未来才有的事——它已经发生了。现在,轮到你迈开脚步,跟上时代的步伐了。 上百万的员工和成千上万的企业已经发现了远程工作的乐趣和好处。然而,远程工作方式还没有成为常见的选择。事实上,远程工作的技术手段都已齐备。还没有升级换代的,是人们的思想。 这本书的目的就是帮你把想法升级换代。作者会向你展示远程工作的诸多好处:可以找到最优秀的人才,从摧残灵魂的通勤路上解脱......一起来看看 《重来2》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具