Go语言中的rune数据类型

2023-11-03

写在前面

最近开始学习Go语言,因为自己是从Java逐步转Go原因,在感慨Go语言简便的同时,也因为其封装的数据类型和包较多,所以还得慢慢学习。今天来谈谈Go语言中的rune数据类型。

名词解释

Go语言中的整数类型也有有符号数和无符号数之别,分别用int 和uint表示,也分别由8、16、32、64位之分。Go语言中有一种特殊的数据类型rune,该数据类型与int32是同义词,或者说其本身只是int32的别称

为何要有rune

那么既然rune和int32等价,为什么还需要有rune这种数据类型呢?我是这么理解的,rune相当于对int32类型的重新封装,是对int32使用场景的特殊化,rune主要用于处理unicode以及utf-8字符。感觉就是适用场景划分的细粒度化

举个例子

说这么多,不如举个例子,请看下面这个简单的Go代码片段:

package main

import (
	"fmt"
)

func main() {
	testStr := "this is a test!"
	testStr1 := "这是一个测试"
	fmt.Println("The length of str is: ",len(testStr))
	fmt.Println("字符串长度为: ",len(testStr1))
}

结果输出应该是15以及6,但是实际的输出是:

The length of str is:  15
字符串长度为:  18

之所以会出现这样的情况,是因为Go语言字符串的底层是byte[]字节数组,在默认的utf-8编码中,英文字符占8位,一个字节,而中文是3个字节,所以这里len()函数输出的是字节数组的额长度,自然第一个是15、第二个是18。所以,这边应该输出utf-8编码的字符串的真实长度,代码见下:

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	testStr := "this is a test!"
	testStr1 := "这是一个测试"
	fmt.Println("The length of str is: ",len(testStr))
	//fmt.Println("字符串长度为: ",len(testStr1))
	fmt.Println("字符串长度为: ",utf8.RuneCountInString(testStr1))
	fmt.Println("字符串长度为: ",len([]rune(testStr1)))
}

输出结果为:

The length of str is:  15
字符串长度为:  6
字符串长度为:  6

可以看到,主要的解决方式有两个,第一个是调用utf8.RuneCountInString( ) 函数,将该字符串以rune的数据类型计算长度,另外一种就是将字符串底层的字节数组转换为rune类型的数组,再计算长度:len([]rune(testStr1))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go语言中的rune数据类型 的相关文章

随机推荐

  • 51单片机学习笔记(十二) - 红外遥控

    文章目录 前言 一 红外遥控的背景知识 1 人机交互 2 红外遥控的相关知识 二 原理图电路分析 三 NEC协议讲解 1 逻辑1与逻辑0的表示 2 NEC协议格式 3 NEC协议的关键点 四 代码实现 总结 前言 随着科技的发展 红外遥控器
  • 【Spring Boot整合MyBatis教程】

    Spring Boot是由Pivotal团队提供的全新框架 其设计目的是用来简化新Spring应用的初始搭建以及开发过程 该框架使用了特定的方式来进行配置 从而使开发人员不再需要定义样板化的配置 通过这种方式 Spring Boot致力于在
  • 用4种语言编写端口扫描器(Java、C、Python、Go)

    Java import java net InetSocketAddress import java net Socket import java util concurrent ExecutorService import java ut
  • Ghost-Docker(五)Nginx+SSL+Https

    使用 Ngins SSL 证书 为 Ghost 实现 Https 访问 HTTPS 协议是由 HTTP 加上 TLS SSL 协议构建的可进行加密传输 身份认证的网络协议 主要通过数字证书 加密算法 非对称密钥等技术完成互联网数据传输加密
  • ElementUI过渡动画篇

    ElementUI过渡动画篇 element官方提供的过渡动画并不能很好的满足使用 我尝试过几种过渡动画的设置方式 最终选择了Animate css 一 使用方法 引入 引入 npm install animate css save 然后在
  • 保姆级连载讲义学Python:第四篇多文件项目的演练

    多文件项目的演练 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录 用于保存 所有和项目相关的文件 一个项目通常会包含 很多源文件 目标 在项目中添加多个文件 并且设置文件的执行 多文件
  • FastAPI从入门到实战(10)——响应模型与状态码

    前面一直记录的是请求相关的内容 这篇文章开始记录一下响应相关的内容 包括请求模型和模型继承以及状态码等相关的内容 一个任意dict构成的基本响应 任意dict构成的响应 app06 get stu06 dict response model
  • STL容器使用中的拷贝成本

    include stdafx h include
  • ESP32基础应用之HTTP 服务器

    文章目录 1 HTTP服务器简介 2 ApiPost测试工具 3 HTTP服务器实验 3 1 ApiPost之GET测试 3 2 ApiPost之POST测试 3 3 ApiPost值PUT测试 参考资料 esp32 http服务器编程指南
  • windows xp 驱动开发(五) USB驱动程序、应用软件概述

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 1 USB设备驱动程序 WDM模型 1 1 分类 USB设备驱动程序的设计是基于微软件的WDM WDM采用分层驱动程序模型
  • vue dependencies相关说明

    依赖项相关说明 dependencies 主页面 riophae vue treeselect 0 4 0 树形多选框 菜单等使用 vue count to 1 0 13 数据动态滚动展示 echarts 4 9 0 fuse js 6 4
  • Feature Selective Anchor-Free Module for Single-Shot Object Detection论文阅读

    Feature Selective Anchor Free Module for Single Shot Object Detection 下载地址 Feature Selective Anchor Free Module for Sing
  • 【深度学习】基于卷积神经网络的验证码识别

    活动地址 CSDN21天学习挑战赛 目录 前言 了解captcha数据集 下载weather photos数据集 采用CPU训练还是GPU训练 区别 使用CPU训练 使用GPU训练 支持中文 导入数据 查看数据量 显示部分图片 预处理 手动
  • 蓝桥杯2022初赛.求和

    题目描述 给定n个整数a 1 a 2 a n 求两两相乘再相加的和 即 S a 1 a 2 a 1 a 3 a 1 a n a 2 a 3 a 2 a n a n 1 a n 输入格式 第一行为正整数n 第二行为n个整数 30 的数据 2
  • nacos启动失败集锦

    我们启动nacos时 常常因各种环境条件所限 导致nacos启动不成功 现将nacos启动不成功的原因及解决办法罗列一下 物理内存小于启动时nacos的虚拟机内存设置 free 命令显示系统内存的使用情况 包括物理内存 交换内存 swap
  • 单元测试时调用 Debug.Break() 无效

    解决方案 在 Debug Break 后等待一帧 示例 UnityTest public IEnumerator TestDebugBreak Debug Log 编辑器暂停 Debug Break yield return null 等待
  • 夜神常用路径

    夜神安卓模拟器下载的文件在哪 怎么找不到了 小伙伴们是不是经常有这些疑问 一般情况下 使用夜神安卓模拟器下载的文件只能在夜神安卓模拟器里面看到 因为其下载的位置是在模拟器的景象文件里 电脑系统的文件夹里是无法直接看到的 不过用户可以使用夜神
  • GRAPH --- 图的相关概念整理

    Graph 更多Graph 的观念与术语 被vertex v指到的vertex vertices 称为v的 successor s 指向v的vertex vertices 称为v的 predecessor s 以 通讯录 为例 v的通讯录内
  • LeetCode 259. 3Sum Smaller(三数值和)

    原题网址 https leetcode com problems 3sum smaller Given an array of n integers nums and a target find the number of index tr
  • Go语言中的rune数据类型

    写在前面 最近开始学习Go语言 因为自己是从Java逐步转Go原因 在感慨Go语言简便的同时 也因为其封装的数据类型和包较多 所以还得慢慢学习 今天来谈谈Go语言中的rune数据类型 名词解释 Go语言中的整数类型也有有符号数和无符号数之别