当前位置: 首页 > news >正文

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 字符的切割、替换等操作。

相关文章:

  • 将eclipse中的web项目导入idea
  • 3d pose 指标和数据集
  • Python第六章17:字典(dict)练习题
  • Varjo Base 将 Varjo XR-4系列支持扩展至2030年
  • yum install 报错(CentOS换源):
  • 喜报|迪捷软件入选工信部“2024年信息技术应用创新解决方案”
  • llamafactory微调效果与vllm部署效果不一致如何解决
  • 多线程编程:条件变量
  • 17--华为防火墙智能选路全解:网络世界的智能导航系统
  • Ubuntu平台下安装Node相关环境
  • MATLAB 2024b深度学习,图神经网络(GNN)
  • Spring Data审计利器:@LastModifiedDate详解!!!
  • 作业(7)
  • 网络空间安全(42)Windows实战篇
  • 3.28-3 文档读取和插入
  • gnvm切换node版本号
  • DATEDIFF 函数
  • 容器主机CPU使用率突增问题一则
  • 设计模式之创建型5种
  • 05-SpringBoot3入门-整合SpringMVC(配置静态资源、拦截器)
  • 以军证实空袭也门多个港口
  • 上海博物馆展览进校园,“小先生”传递文物知识
  • 俄乌代表团抵达谈判会场
  • 中国进出口银行:1-4月投放制造业中长期贷款超1800亿元
  • 广西等地旱情缓解,水利部针对甘肃启动干旱防御Ⅳ级响应
  • “三个集中”之后:图说浦东新区28次撤乡并镇