新闻中心
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
rune是字符,byte是字节。Go中byte为uint8别名,用于ASCII字符或二进制数据;rune为int32别名,表示Unicode码点,处理中文、emoji等多字节字符需用rune,字符串遍历和字符计数应基于rune避免乱码。

在Go语言中,rune 和 byte 是处理字符与字节时最常遇到的两种类型,它们虽然都用于表示数据单元,但用途和底层含义完全不同。理解它们的区别对正确处理字符串、
中文字符和其他多字节文本至关重要。
byte 是 uint8 的别名,表示一个字节
byte 在Go中其实是 uint8 类型的别名,用来表示一个8位的无符号整数,取值范围是 0 到 255。它通常用于处理原始的二进制数据或ASCII字符。
例如,英文字符 'A' 的ASCII码是65,可以用 byte 表示:
- var b byte = 'A' // 值为 65
- 字符串底层由字节组成,但仅当字符串是ASCII时,每个 byte 才对应一个字符
对于只包含ASCII字符的字符串,使用 len(str) 返回的字节数等于字符数。但一旦涉及非ASCII字符(如中文),情况就不同了。
rune 是 int32 的别名,表示一个Unicode码点
rune 是 Go 中 int32 的别名,用来表示一个Unicode字符(即一个码点)。它可以表示包括中文、 emoji、拉丁扩展字符在内的所有Unicode字符。
Unicode编码支持多字节字符,比如:
N世界
一分钟搭建会展元宇宙
138
查看详情
- '你' 是一个中文字符,对应 Unicode 码点 U+4F60,占用3个字节(UTF-8编码下)
- 用 rune 可以准确表示这个字符本身,而不是它的某个字节
Go中的字符串默认以UTF-8格式存储,因此一个字符可能由多个字节组成。使用 []rune(str) 可以将字符串正确拆分为字符序列。
实际使用中的关键区别
看一个例子来理解差异:
str := "Hello, 世界"
fmt.Println("字节数:", len(str)) // 输出: 13("世"和"界"各占3字节)
fmt.Println("字符数:", len([]rune(str))) // 输出: 8(H,e,l,l,o,,, ,世,界)
for i, b := range []byte(str) {
fmt.Printf("%d: %d\n", i, b) // 遍历每一个字节
}
for i, r := range str {
fmt.Printf("%d: %c\n", i, r) // 遍历每一个字符(rune)
}
- range 字符串时,每次迭代返回的是 rune 而不是 byte
- 要获取真实字符数量,应使用 utf8.RuneCountInString(str) 或转换为 []rune
- 直接索引字符串(str[i])得到的是 byte,可能截断多字节字符
何时使用 byte,何时使用 rune?
选择依据是你要处理的是字节流还是字符逻辑:
- 处理文件I/O、网络传输、图片数据等原始二进制时,用 byte
- 处理用户输入、文本显示、字符串截取、统计字符长度时,优先用 rune
- 需要操作单个Unicode字符时,用 rune 切片:[]rune(str)
比如实现一个截取前N个字符的函数,必须基于 rune:
func substr(s string, n int) string {
runes := []rune(s)
if n >= len(runes) {
return s
}
return string(runes[:n])
}
基本上就这些。掌握 byte 和 rune 的本质区别,能避免在处理中文、emoji或多语言文本时出现乱码或截断错误。核心记住:byte 是字节,rune 是字符。
以上就是Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解的详细内容,更多请关注其它相关文章!
# 多个
# 营销推广建议都有哪些呢
# 百度运营seo
# 企业长尾关键词排名系统
# 高密建设网站哪家好
# 表情包推广素材网站
# seo 外链甚意思
# seo关键词解析
# 芜湖谷歌seo方案公司
# 丹东抖音seo加盟推荐
# 竹山县关键词seo排名优化
# 可以用
# 你要
# go
# 二进制数
# 是一个
# 而不是
# 遍历
# 的是
# 多字
# 区别
# 多语言
# 字节
# 编码
# go语言
# golang
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
解决Bootstrap卡片顶部边距导致背景图下移的问题
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相
学习通在线学习平台 学习通网页版直接进入课程中心
AO3官方可用镜像 Archive of Our Own网页版最新入口
J*aScript中针对特定容器内图片动画的实现教程
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
处理嵌套交互式控件:前端可访问性指南
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
随机参数递归函数的基准调用次数与时间复杂度探究
css绝对定位元素脱离父容器怎么办_确保父元素position非static
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
Python实时数据流中的动态最值查找策略
Node.js中HTML按钮与J*aScript函数交互的正确姿势
J*aScript中赋值与自增运算符的复杂交互与执行机制
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
葱吃多了会怎样 葱吃多了会伤胃吗
J*aScript中安全有效地处理localStorage字符串数据
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
不同用户不同价格! 索尼开启账户个性化定价测试
Flexbox布局实践:实现粘性导航栏与底部固定页脚
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
QQ官网正版登录链接 QQ在线登录入口最新
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
CSS子选择器:如何区分并样式化嵌套列表的子层级
PostgreSQL海量数据高效导入策略:Python与Django实践指南
网易大神账号申诉需要多久_网易大神账号申诉流程说明
mc.js免安装版 mc.js一键畅玩入口
Golang指针如何与map组合使用_Golang map指针组合实践
J*a应用集成GitHub CLI与API认证指南
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
Go语言中高效处理x-www-form-urlencoded表单数据
Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南
c++ dfs和bfs代码 c++深度广度优先搜索算法
QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用
一加 14R 快充无反应_一加 14R 充电优化
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
Python多版本共存与虚拟环境管理深度指南
微信网页版官方入口直达 微信网页版网页版登录使用方法
优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率


2025-11-29
浏览次数:次
返回列表