欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Golang 当中 byte 和 rune 类型的区别

Golang 当中 byte 和 rune 类型的区别

2025/4/6 1:29:07 来源:https://blog.csdn.net/Coffeemaker88/article/details/146614198  浏览:    关键词:Golang 当中 byte 和 rune 类型的区别

文章目录

  • Golang 当中 byte 和 rune 类型的区别
    • 类型定义与用途
    • 字符串处理差异
    • 内存占用
    • 典型引用场景

Golang 当中 byte 和 rune 类型的区别

在 Golang 中,runebyte 类型的区别主要体现在字符处理的方式和编码支持上。

类型定义与用途

byte 类型

  • 本质是 uint8 的别名;
  • 用于处理原始字节数据ASCII 字符
  • 适合二进制操作或处理单字节编码的文本(如 ASCII);

rune 类型

  • 本质是 int32 的别名;
  • 用于处理 Unicode 码点,支持 UTF-8 编码的多字节字符;
  • 适合需要操作完整字符的场景,尤其是非 ASCII 文本,比如中文。

字符串处理差异

遍历字符串
使用索引逐字节访问时,返回 byte 类型。使用 range 遍历时,返回 rune 类型,自动解码 UTF-8 字符:

s := "Hello 世界"
// 按byte遍历(可能拆散多字节字符)
for i := 0; i < len(s); i++ {b := s[i] // 类型为byte
}// 按rune遍历(完整字符)
for _, r := range s {fmt.Printf("%c ", r) // 输出:H e l l o   世 界
}

转换切片
[]byte(s) 将字符串转换为原始字节序列;
[]rune(s) 将字符串转换为 Unicode 码点序列;

s := "世界"
fmt.Println(len([]byte(s))) // 输出6(UTF-8编码下每个汉字占3字节)
fmt.Println(len([]rune(s))) // 输出2(两个字符)

内存占用

  • byte:占用一个字节;
  • rune:占用四个字节;

典型引用场景

byte 适用场景

  • 处理二进制文件(如图片、音频);
  • 操作 ASCII 字符串(如解析 HTTP 请求头,从数据流中获取指定长度的字节流使用的也是 byte 类型);
  • 需要低内存占用的场景;

rune 适用场景

  • 统计字符数量;
  • 反转含多字节字符的字符串;
  • 处理 UTF-8 字符的切割、替换等操作。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词