字符串与字符编码 - GO语言从入门到实战
字符串与字符编码 - GO语言从入门到实战
字符串
与其他主要编程语⾔的差异
- 基本数据类型:string 是基础数据类型,而不是引用类型或指针类型。string 在内存中占用的空间大小是固定的,且只读、不可改变。
- 字节切片:string 是只读的 byte slice,它存储了一组连续的字节。
len函数可以它所包含的 byte 数,而不是字符数。 - 存储数据:string 是字节切片的实现,因此可以存储任何类型的数据。因为字节(byte)是一个通用的数据类型,可以表示各种不同的数据。
Unicode UTF8
- Unicode 是⼀种字符集(code point),意味着无论在哪个平台、哪个程序或哪种编程语言中,相同的 Unicode 字符代码点总是代表相同的字符。这使得 Unicode 在全球范围内进行文本交流和存储时非常有用。
- UTF-8 是一种变长编码的字符编码标准,用于将 Unicode 字符编码为字节序列。UTF-8 是 Unicode 的存储和传输形式,因为它能够以不同的字节长度来表示不同的字符。
编码与存储
字符 “中” 在 Unicode 和 UTF-8 中的表示方式:
| 字符 | Unicode | UTF-8 | string/[]byte |
|---|---|---|---|
| 中 | 0x4E2D | 0xE4B8AD | [0xE4, 0xB8, 0xAD] |
附上代码:
package string_test import ( "fmt" "testing"
) func TestString(t *testing.T) { var s string fmt.Println(s) //initializes to default zero value "" s = "hello" fmt.Println(len(s)) //s[1] = '3' //string is an immutable byte slice //s = "\xE4\xB8\xA5" //can store any binary data s = "\xE4\xBA\xBB\xFF" fmt.Println(s) fmt.Println(len(s)) s = "中" fmt.Println(len(s)) //is byte count c := []rune(s) fmt.Println(len(c)) //t.Log("rune size:", unsafe.Sizeof(c[0])) fmt.Printf("中 unicode %x\n", c[0]) fmt.Printf("中 UTF8 %x\n", s)
} func TestStringToRune(t *testing.T) { s := "中华人民共和国" for _, c := range s { fmt.Printf("%c %x\n", c, c) }
}
常⽤字符串函数
Go语言中处理字符串的重要包:strings 和 strconv。
以下是一些这些包中比较常用的函数:
strings 包
strings.Contains(s, substr): 检查字符串s是否包含子串substr。如果包含,返回true;否则返回false。strings.Count(s, substr): 返回子串substr在字符串s中出现的次数。strings.Index(s, substr): 返回子串substr在字符串s中第一次出现的索引,如果未找到则返回-1。strings.LastIndex(s, substr): 返回子串substr在字符串s中最后一次出现的索引,如果未找到则返回-1。strings.Replace(s, old, new, n): 将字符串s中的所有old子串替换为new子串,最多替换n次。strings.ToLower(s): 将字符串s中的所有字符转换为小写。strings.ToUpper(s): 将字符串s中的所有字符转换为大写。strings.Split(s, sep): 将字符串s根据分隔符sep分割为一个字符串切片。strings.TrimSpace(s): 去除字符串s两端的空白字符(包括空格、制表符、换行符等)。
strconv 包
strconv.Atoi(s): 将字符串s转换为对应的整数。如果转换失败,返回错误。strconv.Itoa(n): 将整数n转换为对应的字符串。strconv.FormatFloat(f, fmt, prec, bitSize): 将浮点数f格式化为指定格式的字符串,精度为prec,位数为bitSize。strconv.ParseFloat(s, bitSize): 将字符串s解析为指定位数的浮点数。strconv.Unquote(s): 将字符串s解析为被引号包围的字符串,例如 ‘“hello”’。如果解析失败,返回错误。strconv.Quote(s): 将字符串s用双引号包围,例如 ‘“hello”’。
以上只是这些包中函数的一部分,这两个包都有更多功能,用于处理各种字符串相关的问题。查阅Go的官方文档来了解更多详情。
下面提供一些函数的代码案例:
strings.Split 和 strings.Join
package main import ("strings""fmt"
)func main() { s := "A,B,C"//使用 strings.Split 函数按照逗号分割这个字符串,将分割后的各个部分存储在 parts 切片中parts := strings.Split(s, ",")for _, part := range parts {fmt.Println(part)}//使用 strings.Join 函数将 parts 中的元素用连字符连接起来fmt.Println(strings.Join(parts, "-"))s := strconv.Itoa(10)fmt.Println("str" + s)if i, err := strconv.Atoi("10"); err == nil {fmt.Println(10 + i)}
}
strconv.Itoa 和 strconv.Atoi
package main import ("strconv""fmt"
)func main() { //使用 strconv.Itoa 函数将整数10转换为对应的字符串。s := strconv.Itoa(10)fmt.Println("str" + s)//使用 strconv.Atoi 函数尝试将字符串 "10" 转换为一个整数。如果转换成功(即没有错误发生),那么就会打印出 10 + i 的结果,其中 i 是 "10" 转换后的整数。if i, err := strconv.Atoi("10"); err == nil {fmt.Println(10 + i)}
}
学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。
码字不易,如果该文章有用,请多多关注或者赞赏,谢谢!
欢迎关注云尔Websites CSDN博客
相关文章:
字符串与字符编码 - GO语言从入门到实战
字符串与字符编码 - GO语言从入门到实战 字符串 与其他主要编程语⾔的差异 基本数据类型:string 是基础数据类型,而不是引用类型或指针类型。string 在内存中占用的空间大小是固定的,且只读、不可改变。字节切片:string 是只读…...
12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller
12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller 我们提供三种不同类别的EDGEBoost I/O模块供选择,以实现最大程度的I/O定制: 数字和模拟输入/输出网络和连接边缘人工智能和存储 利用EDGEBoost I/O实现变革性技术 EBIO-2M2BK EBIO-2M2BK载板支持…...
WPF向Avalonia迁移(四、其他事项)
开发必备 1. Avalonia项目源代码!!!!!!!!!!没有源代码,你连控件的背景色怎么改都找不着!! 2.下载你所使用的版本&#x…...
Python 代码调试
from pdb import set_trace as stx 是一个Python代码中常用的调试技巧之一,它用于在代码中插入断点以进行调试。这行代码的作用是将Python标准库中的 pdb(Python Debugger)模块中的 set_trace 函数导入,并将其重命名为 stx&#x…...
DM宣传单制作,利用在线模板,快速替换文字
如果你需要制作一批宣传单,但是时间很紧,而且没有专业的设计人员协助,那么你可以选择使用在线模板来快速制作宣传单。本文将介绍如何使用乔拓云平台,快速制作宣传单的方法。 步骤一:选择适合的在线制作工具 首先&…...
【力扣】42. 接雨水
这道题我卡了差不多1个小时,不是不会做,是不知道怎么能用栈来实现,后面看了一个博主的视频,豁然开朗,我主要的纠结点在于当指针指到7的时候,我计算出4到7的水块是2,但实际上是0,因为…...
IPETRONIK数据采集设备携手Softing Q-Vision软件致力于ADAS测试方案
一 背景 汽车ADAS技术是当下国内外的重点研究方向,且ADAS的发展水平和市场竞争力紧密相关,因此一套完善的ADAS测试方案对各整车厂而言非常重要。然而,国内ADAS测试却面临着很多阻碍,主要原因在于:相关测试设备昂贵&am…...
Go语言中的指针介绍
Go语言中的指针 文章目录 Go语言中的指针一、Go语言中的指针介绍1.1 指针介绍1.2 基本语法1.3 声明和初始化1.4 Go 指针的3个重要概念1.4.1 指针地址(Pointer Address)1.4.2 指针类型(Pointer Type)1.4.3 指针取值(Poi…...
简单理解区块链
这篇是挖矿篇详细介绍区块链之挖矿-CSDN博客的后置文章,咱们通过之前的解释进一步复习学习区块链叭! 百度百科定义 区块链,就是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这…...
[尚硅谷React笔记]——第3章 React应用(基于React脚手架)
目录: react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程(通用)组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…...
《Linux 内核设计与实现》13. 虚拟文件系统
通用文件接口 VFS 使得可以直接使用 open()、read()、write() 这样的系统调用而无需考虑具体文件系统和实际物理介质。 好处:新的文件系统和新类型的存储介质需要挂载时,程序无需重写,甚至无需重新编译。 VFS 将各种不同的文件系统抽象后采…...
2021-06-09 51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次
缘由51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^0; sbit K2 P1^1; sbit LEDP0^0; void main() {unsigned char Xd0,ss0;unsigned int wei0;while(1){if(K10&&Xd0){ss3*2;…...
C/C++ 经典面试算法题
1.打印杨辉三角 1 #include <stdio.h>2 #include <string.h>3 4 int main()5 {6 int x;7 int a[100][100];8 printf("输入行数\n");9 scanf("%d",&x); 10 for(int i 0;i<x;i) 11 { 12 for(int j 0;…...
2023年下学期《C语言》作业0x02-分支 XTU OJ 1068 1069 1070 1071 1072
第一题 #include<stdio.h>int main() {int a;scanf("%d",&a);if(a>90&&a<100) printf("A");else printf("B");return 0; } 没有换行,不然会格式错误 第二题 #include<stdio.h>int main() {int a;s…...
JMeter学习第一、二、三天
首先,我们来了解一下到底什么是接口测试与性能测试: 接口测试 定义 接口测试主要关注系统组件之间的交互,确保各个接口按预期工作。这包括验证传递的数据、数据格式、调用的频率和其他与接口调用相关的任何限制。 目的 确保系统的各个组件可…...
常用的分布式ID解决方案原理解析
目录 前言 一:分布式ID的使用场景 二:分布式ID设计的技术指标 三:常见的分布式ID生成策略 3.1 UUID 3.2 数据库生成 3.3 数据库的多主模式 3.4 号段模式 3.5 雪花算法 前言 分布式ID的生成是分布式系统中非常核心的基础性模块&#…...
echarts3D地图打点
1、echarts地图打点加鼠标移上去显示文字 2、1-3和前面的一样echart3D地图 if (res.code 0) {const resData res.data || [];if (resData.length > 0) {for (var i 0; i < resData.length; i) {let arr new Array(2);arr[0] resData[i].longitude || ""…...
分布式主键算法
目录 一、引言二、常见算法介绍雪花算法(Snowflake Algorithm)特性详解优势劣势 UUID(Universally Unique Identifier)特性详解优势劣势 数据库自增主键特性详解优势劣势 分布式数据库的序列(Sequence)特性…...
暴力破解及验证码安全
1.暴力破解注意事项 1、破解前一定要有一个有郊的字典(Top100 TOP2000 csdn QQ 163等密码) https://www.bugku.com/mima/ 密码生成器 2、判断用户是否设置了复杂的密码 在注册页面注册一个,用简单密码看是否可以注册成功 3、网站是…...
程序无法启动,提示“找不到msvcp140.dll”或“msvcp140.dll缺失报错”解决方法
大家好!今天我来给大家分享一下msvcp140.dll丢失的解决方法。我们都知道,在运行一些软件或游戏时,经常会遇到“找不到msvcp140.dll”的错误提示,这会让我们非常苦恼。那么,这个问题该怎么解决呢?下面我将为…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
