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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

信息检索导论

信息检索导论

Christopher D.Manning、Hinrich Schütze、Prabhakar Raghavan / 王斌 / 人民邮电出版社 / 201008 / 69.00元

封面图片为英国伯明翰塞尔福瑞吉百货大楼,其极具线条感的轮廓外型优美,犹如水波的流动。其外表悬挂了1.5万个铝碟,创造出一种极具现代气息的纹理装饰效果,有如夜空下水流的波光粼粼,闪烁于月光之下,使建筑的商业氛围表现到极致。设计该建筑的英国“未来系统建筑事物所”,将商场内部围合成一个顶部采光的中庭,配以交叉的自动扶梯,使购物环境呈现出一种凝聚的向心力和商业广告的展示效应。作为英国第二商业城市伯明翰的建......一起来看看 《信息检索导论》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具