golang string、byte[]以及rune的基本概念,用法以及区别
在 Go 语言中,string
、byte[]
和 rune
是处理文本和字符的三种不同数据类型。它们有各自的用途和特点,下面将详细介绍它们的基本概念、用法以及区别。
1. string
基本概念
- 字符串类型:
string
是 Go 语言中的一种基本类型,用于表示一系列字节序列。 - 不可变:字符串在 Go 中是不可变的,也就是说,一旦创建,字符串的内容就不能被修改。
- UTF-8 编码:在 Go 中,字符串默认采用 UTF-8 编码,这意味着可以包含任意 Unicode 字符。
用法
- 字符串用双引号 (
"
) 或反引号 (``) 包裹。 - 可以用字符串切片访问单个字节或子串。
示例
package mainimport "fmt"func main() {var str string = "Hello, 世界"fmt.Println(str) // 输出: Hello, 世界// 访问字符串的某个字节fmt.Printf("First byte: %c\n", str[0]) // 输出: H// 获取字符串长度(字节长度)fmt.Println("Length in bytes:", len(str)) // 输出: 13// 遍历字符串中的每个字节for i := 0; i < len(str); i++ {fmt.Printf("%c ", str[i])}// 输出: H e l l o , ä¸ ç // 遍历字符串中的每个 Unicode 字符for _, r := range str {fmt.Printf("%c ", r)}// 输出: H e l l o , 世 界
}
特点
- 不可变:不能修改字符串中的某个字符或字节。
- 支持 UTF-8 编码,可以直接处理 Unicode 字符。
- 可以通过
len()
获取字符串的字节长度。
2. byte[]
基本概念
- 字节切片:
byte
是一个无符号 8 位整数(uint8
),byte[]
是一个byte
类型的切片(slice
)。 - 表示原始数据:常用于表示原始的二进制数据,如文件内容、网络数据包等。
- ASCII 或单字节编码:可以用于处理 ASCII 字符或单字节字符集的字符串。
用法
- 用于需要直接操作字节数据的场景。
- 可以用
[]byte
将字符串转换为字节切片,反之亦然。
示例
package mainimport "fmt"func main() {var byteArray []byte = []byte{'H', 'e', 'l', 'l', 'o'}fmt.Println(byteArray) // 输出: [72 101 108 108 111]str := "Hello, 世界"byteArray = []byte(str)fmt.Println(byteArray) // 输出: [72 101 108 108 111 44 32 228 184 150 231 149 140]// 修改字节切片中的某个字节byteArray[0] = 'h'fmt.Println(string(byteArray)) // 输出: hello, 世界
}
特点
- 可变:可以修改切片中的字节。
- 适合处理二进制数据和需要频繁操作的字节序列。
- 可以方便地与字符串互相转换。
3. rune
基本概念
- Unicode 码点:
rune
是一个 32 位的整数(int32
),用于表示一个 Unicode 码点。 - 字符类型:在 Go 中,
rune
用于表示一个字符(不局限于单个字节的字符)。 - 支持所有 Unicode 字符:包括多字节字符,这对于处理国际化文本非常重要。
用法
- 用于需要逐个处理 Unicode 字符的场景。
- 可以将字符串转换为
rune
切片,以便操作和处理每个字符。
示例
package mainimport "fmt"func main() {var runeChar rune = '世'fmt.Printf("%c\n", runeChar) // 输出: 世str := "Hello, 世界"runeArray := []rune(str)fmt.Println(runeArray) // 输出: [72 101 108 108 111 44 32 19990 30028]// 修改 rune 切片中的某个字符runeArray[7] = '界'fmt.Println(string(runeArray)) // 输出: Hello, 界界
}
特点
- 每个
rune
表示一个 Unicode 字符。 - 用于处理多字节字符和 Unicode 文本。
- 可以通过
rune
切片遍历和操作字符串中的每个字符。
区别总结
特性 | string | byte[] | rune |
---|---|---|---|
数据类型 | 不可变的字符串 | 可变的字节切片 | 可变的 rune (字符)切片 |
单位 | UTF-8 字符串 | 单个字节 | Unicode 码点(字符) |
主要用途 | 存储和操作文本数据 | 操作原始二进制数据或单字节字符 | 处理和操作 Unicode 字符 |
可变性 | 不可变 | 可变 | 可变 |
访问方式 | 按字节或字符(rune)访问 | 按字节访问 | 按字符(rune)访问 |
示例 | "Hello, 世界" | []byte{'H', 'e', 'l', 'l', 'o'} | []rune{'H', '世'} |
使用场景
string
:用于大多数文本处理场景,尤其是需要支持 Unicode 的地方。byte[]
:用于处理二进制数据或需要直接操作字节的场景,例如文件操作、网络通信等。rune
:用于需要处理和操作 Unicode 字符的场景,尤其是涉及多语言文本处理时。
相关文章:
golang string、byte[]以及rune的基本概念,用法以及区别
在 Go 语言中,string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点,下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型:string 是 Go 语言中的一种基本类型,用于表…...
全国211大学名单及排名
序号 名称 省份 985 211 双一流 1 北京大学 北京 是 是 是 2 清华大学 北京 是 是 是 3 复旦大学 上海 是 是 是 4 上海交通大学 上海 是 是 是 5 浙江大学 浙江 是 是 是 6 国防科技大学 湖南 是 是 是 7 中国人民大学 北京 是 …...
ASR 语音识别相关
ASR 语音识别 ASR(Automatic Speech Recognition,自动语音识别)是一种能够将语音转换为文本的技术。这种技术使得计算机能够“听懂”我们说的话,并将它们记录下来。这项技术被广泛应用于日常生活中的各种场景,比如语音…...
kotlin require和assert 区别
在 Kotlin 中,require 和 assert 是两种用于验证条件的方法,主要区别在于它们的使用场景和触发机制。 require require 用于函数参数的验证。如果条件不满足,它会抛出 IllegalArgumentException 异常。这通常用于对公共 API 的输入参数进行…...
考研:数学一/二 和英语一/二 有什么区别
考研数学一/二 区别: 考试内容: 数学一:考查内容包括高等数学、线性代数、以及概率论与数理统计,覆盖的知识面较为全面,题目难度也相对较高。数学二:考试内容包含高等数学和线性代数,不包括概率…...
地铁中的CAN通信--地铁高效安全运转原理
目前地铁采用了自动化的技术来实现控制,有ATC(列车自动控制)系统可以实现列车自动驾驶、自动跟踪、自动调度;SCADA(供电系统管理自动化)系统可以实现主变电所、牵引变电所、降压变电所设备系统的遥控、遥信、遥测;BAS(环境监控系统)和FAS(火灾报警系统)可以实现车站…...
简化数据提取:Excel-Extractor 使用指南
前言 在当今数据驱动的世界中,从复杂的 Excel 文件中提取和分析数据是许多业务和研究工作的基本需求。为了简化这一过程,Excel-Extractor 项目应运而生。本文将为你介绍 Excel-Extractor 的功能和如何在你的项目中使用它。 什么是 Excel-Extractor&…...
用户中心项目全流程
企业做项目流程 需求分析 > 设计(概要设计 、 详细设计) > 技术选型 >初始化项目 / 引入需要的技术 > 写个小demo > 写代码 (实现业务逻辑) > 测试(单元测试)> 代码提交 / 代码评审 …...
达梦数据库的系统视图v$database
达梦数据库的系统视图v$database 基础信息 OS版本: Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本: DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库(Dameng Database…...
Vue.js中的虚拟DOM
一.节点和状态 在我们平常对DOM操作的时候,之前在vue没有诞生之前,以命令式的方式对DOM进行操作,页面上的每一个元素都可以看做成一个节点状态。 二.剔除和渲染 框架都有自己渲染的方式,假设一个页面的状态,随着Ajax请求的放松,状态发生改变,有以下的两种方式供你选择&#…...
【设计模式之迭代器模式 -- C++】
迭代器模式 – 遍历集合,无需暴露 迭代器模式是一种设计模式,用于顺序访问集合对象的元素,而无需暴露其底层实现。迭代器模式分离了集合对象的遍历行为,使得访问元素时,可以不必了解集合对象的底层实现。 组成 迭代…...
Linux网络编程:套接字编程
1.Socket套接字编程 1.1.什么是socket套接字编程 Socket套接字编程 是一种基于网络层和传输层网络通信方式,它允许不同主机上的应用程序之间进行双向的数据通信。Socket是网络通信的基本构件,它提供了不同主机间的进程间通信端点的抽象。一个Socket就是…...
多电商账户为什么要用指纹浏览器?
随着电子商务的蓬勃发展,越来越多的商家选择开设多店来扩大经营规模。然而多店运营也带来了一系列的挑战,其中之一就是账号安全。 1. 了解反检测浏览器和代理服务器 在我们开始讨论如何有效地使用反检测浏览器之前,我们首先需要了解这两个工…...
用Rancher2.8.5部署K8s集群
参考:通过Rancher 2.7.5部署企业生产级K8s集群 新K8s集群的环境信息 Rancher1台,K8s集群6台(1台rancher,3台master,4台node)。 Name|lmage Name|IP Address|Flavor|Comment project-root-dev-rancher|Ro…...
未来已来,如何打造智慧养殖场?
近年来,国家出台了一系列扶持政策,以促进养殖行业高质量发展,推动行业转型升级。在国家政策和市场需求的双重驱动下,养殖行业正迎来前所未有的发展机遇。智慧养殖以其高效、智能和可持续的特点,正逐步取代传统养殖方式…...
代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
打卡Day7 1.454.四数相加II2.383. 赎金信3.15. 三数之和4.18. 四数之和 1.454.四数相加II 题目链接:四数相加II 文档讲解: 代码随想录 class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int res 0;Map…...
Python和tkinter实现的字母记忆配对游戏
Python和tkinter实现的字母记忆配对游戏 因为这个小游戏用到了tkinter,先简要介绍一下它。tkinter是Python的标准GUI(图形用户界面)库,它提供了一种简单而强大的方式来创建图形界面应用程序。它提供了创建基本图形界面所需的所有工具,同时保…...
Leetcode Hot100之链表
1.相交链表 解题思路 快慢指针:分别求出两个链表的长度n1和n2,在长度较长的那个链表上,快指针先走n2 - n1,慢指针再出发,最后能相遇则链表相交 时间复杂度O(mn),空间复杂度O(1)代码# Definition for singl…...
5.9k!一款清新好用的后台管理系统!【送源码】
今天给大家分享的开源项目是一个优雅清新后台管理系统——Soybean Admin。 简介 官方是这样介绍这个项目的: Soybean Admin 使用的是Vue3作为前端框架,TypeScript作为开发语言,同时还整合了NaiveUI组件库,使得系统具有高可用性和…...
Vue-cli搭建项目----基础版
什么是Vue-cli 全称:Vue command line interface 是一个用于快速搭建Vue.js项目的标准工具,他简化了Vue.js应用的创建和管理过程,通过命令工具帮助开发者快速生成,配置和管理Vue项目. 主要功能 同一的目录结构本地调试热部署单元测试集成打包上线 具体操作 第一步创建项目:…...
python之__call__函数介绍
Python 中的 __call__ 方法是一种特殊的方法,它允许对象像函数一样被调用。当你创建一个对象并使用括号 () 调用它时,Python 会自动调用这个对象的 __call__ 方法。 1. 基本用法 下面是一个简单的例子: class MyClass:def __init__(self, value):self.value valued…...
【AI】生成式AI服务器最低配置
【背景】 考虑数据安全,又想用AI赋能企业内部的日常工作,答案只有一个,本地部署。 UI采用open-web-ui,模型用Ollama管理,在局域网做成SAAS服务。要组一个服务器,提供部门内部最多30个的API并发。以下为反复…...
2.Android逆向协议-了解常用的逆向工具
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:微尘网校 上一个内容:1.Android逆向协议-环境搭建 常用的工具:AndroidKiller、jadx、JEB、IDA AndroidKiller…...
大数据------额外软件、插件及技术------Linux(完整知识点汇总)
Linxu 不同领域的主流操作系统 桌面操作系统 WindowsMAac OSLinux 服务器端操作系统 UNIX(付费)LinuxWindows Server(付费) 移动设备操作系统 Android(基于Linux开源)IOS(不开源) 嵌…...
iOS 其他应用的文件如何在分享中使用自己的应用打开
废话少说 一、第一步:先配置好plist文件 右击info.plist如下图文件打开 根据自己需要配置支持的文件类型,也可使用property List中配置,一样的 其他的文件可是参考文档:System-Declared Uniform Type Identifiers 可复制的代码&am…...
【编译原理必考大题】 推导构建语法树,写出语法树的短语,简单短语和句柄
写在最前 本文为编译原理重点考察大题之一,理论基础见专栏文章,0基础直接使用也可食用 文章目录 推导构造语法树1.语法树的概念2. 子树,短语,简单短语,句柄2.1 子树2.2 短语2.3 简单短语与句柄2.4 真题实战 推导构造语…...
redis服务介绍
redis 基础概念安装使用基础操作命令数据类型操作命令 管理和维护命令 基础概念 Remote Dictionary Server(Redis)远程字典服务器是完全开源免费的,用C语言编写的,遵守BSD开源协议,是一个高性能的(key/val…...
nodepad 中换行符、tab替换
1 nodepad 主要符号 换行符: \r\n(windows) tab: \t 2 展示符号 3 相互替换 tip:需要点击扩展 参考: https://blog.csdn.net/lijing742180/article/details/85174564...
常见的字符串函数(包含头文件string.h)和字符函数(2)
八. strstr函数 1.strstr的定义 char *strstr( const char *str1, const char *str2 ); ->1. strstr查找子串(str2)在字符串(str2)中第一次出现的位置,记录并返回该位置的指针,如果找不到,则返回NULL ->2. str1:查找字符…...
Python | Leetcode Python题解之第187题重复的DNA序列
题目: 题解: L 10 bin {A: 0, C: 1, G: 2, T: 3}class Solution:def findRepeatedDnaSequences(self, s: str) -> List[str]:n len(s)if n < L:return []ans []x 0for ch in s[:L - 1]:x (x << 2) | bin[ch]cnt defaultdict(int)for…...
陕西企业营销型网站建设/网站权重怎么看
本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ 按钮 Drop Down Control 按钮 -Circular Music Player Control 》》 Flat Pill Button 按钮类 --Fancy Menu 按钮之 每日一道理 我拽着春姑娘的衣裙,春姑娘把我带…...
wordpress 图片 主题/萌新seo
语法结构 do{ <code to be looped>; }while(<test>);<test>返回的是一个bool值(循环的条件判断) 使用循环输出1-9 int index 1;do{Console.WriteLine(index);index;} while (index < 9);//do while循环会首先执行一次循环体,然后进行条件判断 循环体的执…...
长沙工程有限公司/企业seo顾问
“互联网这个行业,最早由老虎和狐狸把事业开创起来,后来逐渐进入两条狗,然后是熊——百度,还有猫——猫扑。当然,南极的动物企鹅也不甘寂寞,没有想到 在这么多野兽横行的市场上竟然长出土豆,最后…...
武汉高端商城网站建设/自媒体平台注册
总之岁月漫长,然而值得等待。。。。 MVC、MVP、MVVM简述 mvc模式:model(模型)、view(视图)、controller(控制器) > view一般通过controller和model进行联系,controller是model和view的协调者,view和model不直接联系。基本联系都…...
建设银行招聘网站/北京seo优化
可能有不少人从其他岗位转到产品岗位,在需要学习Axure画原型时,碰到“函数”的概念时可能还是会比较懵,如果以前是做开发的一般都不会有什么问题。以下是针对不清楚“函数”概念的同学讲的,知道的可以忽略掉,以下内容可…...
文化馆网站建设/百度咨询电话人工台
为了项目展示需要,要从Windows远程桌面连接Mac OS X,调研半天终于成功,记录如下:1.Mac OS X VNC服务设置Mac OS X 10.5已经增加支持了由VNC Viewer访问的功能,设置如下系统偏好设置-共享-勾选“屏幕共享”,…...