Go 的 rune byte 和 string

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

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

查看所有标签

猜你喜欢:

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

Sprint

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》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码