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

golang string、byte[]以及rune的基本概念,用法以及区别

在 Go 语言中,stringbyte[]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 切片遍历和操作字符串中的每个字符。

区别总结

特性stringbyte[]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 语言中&#xff0c;string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点&#xff0c;下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型&#xff1a;string 是 Go 语言中的一种基本类型&#xff0c;用于表…...

全国211大学名单及排名

序号 名称 省份 985 211 双一流 1 北京大学 北京 是 是 是 2 清华大学 北京 是 是 是 3 复旦大学 上海 是 是 是 4 上海交通大学 上海 是 是 是 5 浙江大学 浙江 是 是 是 6 国防科技大学 湖南 是 是 是 7 中国人民大学 北京 是 …...

ASR 语音识别相关

ASR 语音识别 ASR&#xff08;Automatic Speech Recognition&#xff0c;自动语音识别&#xff09;是一种能够将语音转换为文本的技术。这种技术使得计算机能够“听懂”我们说的话&#xff0c;并将它们记录下来。这项技术被广泛应用于日常生活中的各种场景&#xff0c;比如语音…...

kotlin require和assert 区别

在 Kotlin 中&#xff0c;require 和 assert 是两种用于验证条件的方法&#xff0c;主要区别在于它们的使用场景和触发机制。 require require 用于函数参数的验证。如果条件不满足&#xff0c;它会抛出 IllegalArgumentException 异常。这通常用于对公共 API 的输入参数进行…...

考研:数学一/二 和英语一/二 有什么区别

考研数学一/二 区别&#xff1a; 考试内容&#xff1a; 数学一&#xff1a;考查内容包括高等数学、线性代数、以及概率论与数理统计&#xff0c;覆盖的知识面较为全面&#xff0c;题目难度也相对较高。数学二&#xff1a;考试内容包含高等数学和线性代数&#xff0c;不包括概率…...

地铁中的CAN通信--地铁高效安全运转原理

目前地铁采用了自动化的技术来实现控制,有ATC(列车自动控制)系统可以实现列车自动驾驶、自动跟踪、自动调度;SCADA(供电系统管理自动化)系统可以实现主变电所、牵引变电所、降压变电所设备系统的遥控、遥信、遥测;BAS(环境监控系统)和FAS(火灾报警系统)可以实现车站…...

简化数据提取:Excel-Extractor 使用指南

前言 在当今数据驱动的世界中&#xff0c;从复杂的 Excel 文件中提取和分析数据是许多业务和研究工作的基本需求。为了简化这一过程&#xff0c;Excel-Extractor 项目应运而生。本文将为你介绍 Excel-Extractor 的功能和如何在你的项目中使用它。 什么是 Excel-Extractor&…...

用户中心项目全流程

企业做项目流程 需求分析 > 设计&#xff08;概要设计 、 详细设计&#xff09; > 技术选型 >初始化项目 / 引入需要的技术 > 写个小demo > 写代码 &#xff08;实现业务逻辑&#xff09; > 测试&#xff08;单元测试&#xff09;> 代码提交 / 代码评审 …...

达梦数据库的系统视图v$database

达梦数据库的系统视图v$database 基础信息 OS版本&#xff1a; Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a; DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库&#xff08;Dameng Database&#xf…...

Vue.js中的虚拟DOM

一.节点和状态 在我们平常对DOM操作的时候,之前在vue没有诞生之前,以命令式的方式对DOM进行操作,页面上的每一个元素都可以看做成一个节点状态。 二.剔除和渲染 框架都有自己渲染的方式,假设一个页面的状态,随着Ajax请求的放松,状态发生改变,有以下的两种方式供你选择&#…...

【设计模式之迭代器模式 -- C++】

迭代器模式 – 遍历集合&#xff0c;无需暴露 迭代器模式是一种设计模式&#xff0c;用于顺序访问集合对象的元素&#xff0c;而无需暴露其底层实现。迭代器模式分离了集合对象的遍历行为&#xff0c;使得访问元素时&#xff0c;可以不必了解集合对象的底层实现。 组成 迭代…...

Linux网络编程:套接字编程

1.Socket套接字编程 1.1.什么是socket套接字编程 Socket套接字编程 是一种基于网络层和传输层网络通信方式&#xff0c;它允许不同主机上的应用程序之间进行双向的数据通信。Socket是网络通信的基本构件&#xff0c;它提供了不同主机间的进程间通信端点的抽象。一个Socket就是…...

多电商账户为什么要用指纹浏览器?

随着电子商务的蓬勃发展&#xff0c;越来越多的商家选择开设多店来扩大经营规模。然而多店运营也带来了一系列的挑战&#xff0c;其中之一就是账号安全。 1. 了解反检测浏览器和代理服务器 在我们开始讨论如何有效地使用反检测浏览器之前&#xff0c;我们首先需要了解这两个工…...

用Rancher2.8.5部署K8s集群

参考&#xff1a;通过Rancher 2.7.5部署企业生产级K8s集群 新K8s集群的环境信息 Rancher1台&#xff0c;K8s集群6台&#xff08;1台rancher&#xff0c;3台master&#xff0c;4台node&#xff09;。 Name|lmage Name|IP Address|Flavor|Comment project-root-dev-rancher|Ro…...

未来已来,如何打造智慧养殖场?

近年来&#xff0c;国家出台了一系列扶持政策&#xff0c;以促进养殖行业高质量发展&#xff0c;推动行业转型升级。在国家政策和市场需求的双重驱动下&#xff0c;养殖行业正迎来前所未有的发展机遇。智慧养殖以其高效、智能和可持续的特点&#xff0c;正逐步取代传统养殖方式…...

代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

打卡Day7 1.454.四数相加II2.383. 赎金信3.15. 三数之和4.18. 四数之和 1.454.四数相加II 题目链接&#xff1a;四数相加II 文档讲解&#xff1a; 代码随想录 class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int res 0;Map…...

Python和tkinter实现的字母记忆配对游戏

Python和tkinter实现的字母记忆配对游戏 因为这个小游戏用到了tkinter&#xff0c;先简要介绍一下它。tkinter是Python的标准GUI(图形用户界面)库&#xff0c;它提供了一种简单而强大的方式来创建图形界面应用程序。它提供了创建基本图形界面所需的所有工具&#xff0c;同时保…...

Leetcode Hot100之链表

1.相交链表 解题思路 快慢指针&#xff1a;分别求出两个链表的长度n1和n2&#xff0c;在长度较长的那个链表上&#xff0c;快指针先走n2 - n1&#xff0c;慢指针再出发&#xff0c;最后能相遇则链表相交 时间复杂度O(mn)&#xff0c;空间复杂度O(1)代码# Definition for singl…...

5.9k!一款清新好用的后台管理系统!【送源码】

今天给大家分享的开源项目是一个优雅清新后台管理系统——Soybean Admin。 简介 官方是这样介绍这个项目的&#xff1a; Soybean Admin 使用的是Vue3作为前端框架&#xff0c;TypeScript作为开发语言&#xff0c;同时还整合了NaiveUI组件库&#xff0c;使得系统具有高可用性和…...

Vue-cli搭建项目----基础版

什么是Vue-cli 全称:Vue command line interface 是一个用于快速搭建Vue.js项目的标准工具,他简化了Vue.js应用的创建和管理过程,通过命令工具帮助开发者快速生成,配置和管理Vue项目. 主要功能 同一的目录结构本地调试热部署单元测试集成打包上线 具体操作 第一步创建项目:…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...