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

字符串与字符编码 - GO语言从入门到实战

字符串与字符编码 - GO语言从入门到实战

字符串

与其他主要编程语⾔的差异

  1. 基本数据类型:string 是基础数据类型,而不是引用类型或指针类型。string 在内存中占用的空间大小是固定的,且只读、不可改变。
  2. 字节切片:string 是只读的 byte slice,它存储了一组连续的字节。len 函数可以它所包含的 byte 数,而不是字符数。
  3. 存储数据:string 是字节切片的实现,因此可以存储任何类型的数据。因为字节(byte)是一个通用的数据类型,可以表示各种不同的数据。

Unicode UTF8

  1. Unicode 是⼀种字符集(code point),意味着无论在哪个平台、哪个程序或哪种编程语言中,相同的 Unicode 字符代码点总是代表相同的字符。这使得 Unicode 在全球范围内进行文本交流和存储时非常有用。
  2. UTF-8 是一种变长编码的字符编码标准,用于将 Unicode 字符编码为字节序列。UTF-8 是 Unicode 的存储和传输形式,因为它能够以不同的字节长度来表示不同的字符。

编码与存储

字符 “中” 在 Unicode 和 UTF-8 中的表示方式:

字符UnicodeUTF-8string/[]byte
0x4E2D0xE4B8AD[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语言中处理字符串的重要包:stringsstrconv
以下是一些这些包中比较常用的函数:

strings 包
  1. strings.Contains(s, substr): 检查字符串 s 是否包含子串 substr。如果包含,返回 true;否则返回 false
  2. strings.Count(s, substr): 返回子串 substr 在字符串 s 中出现的次数。
  3. strings.Index(s, substr): 返回子串 substr 在字符串 s 中第一次出现的索引,如果未找到则返回-1。
  4. strings.LastIndex(s, substr): 返回子串 substr 在字符串 s 中最后一次出现的索引,如果未找到则返回-1。
  5. strings.Replace(s, old, new, n): 将字符串 s 中的所有 old 子串替换为 new 子串,最多替换 n 次。
  6. strings.ToLower(s): 将字符串 s 中的所有字符转换为小写。
  7. strings.ToUpper(s): 将字符串 s 中的所有字符转换为大写。
  8. strings.Split(s, sep): 将字符串 s 根据分隔符 sep 分割为一个字符串切片。
  9. strings.TrimSpace(s): 去除字符串 s 两端的空白字符(包括空格、制表符、换行符等)。
strconv 包
  1. strconv.Atoi(s): 将字符串 s 转换为对应的整数。如果转换失败,返回错误。
  2. strconv.Itoa(n): 将整数 n 转换为对应的字符串。
  3. strconv.FormatFloat(f, fmt, prec, bitSize): 将浮点数 f 格式化为指定格式的字符串,精度为 prec,位数为 bitSize
  4. strconv.ParseFloat(s, bitSize): 将字符串 s 解析为指定位数的浮点数。
  5. strconv.Unquote(s): 将字符串 s 解析为被引号包围的字符串,例如 ‘“hello”’。如果解析失败,返回错误。
  6. 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; } 没有换行&#xff0c;不然会格式错误 第二题 #include<stdio.h>int main() {int a;s…...

JMeter学习第一、二、三天

首先&#xff0c;我们来了解一下到底什么是接口测试与性能测试&#xff1a; 接口测试 定义 接口测试主要关注系统组件之间的交互&#xff0c;确保各个接口按预期工作。这包括验证传递的数据、数据格式、调用的频率和其他与接口调用相关的任何限制。 目的 确保系统的各个组件可…...

常用的分布式ID解决方案原理解析

目录 前言 一&#xff1a;分布式ID的使用场景 二&#xff1a;分布式ID设计的技术指标 三&#xff1a;常见的分布式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 || ""…...

分布式主键算法

目录 一、引言二、常见算法介绍雪花算法&#xff08;Snowflake Algorithm&#xff09;特性详解优势劣势 UUID&#xff08;Universally Unique Identifier&#xff09;特性详解优势劣势 数据库自增主键特性详解优势劣势 分布式数据库的序列&#xff08;Sequence&#xff09;特性…...

暴力破解及验证码安全

1.暴力破解注意事项 1、破解前一定要有一个有郊的字典&#xff08;Top100 TOP2000 csdn QQ 163等密码&#xff09; https://www.bugku.com/mima/ 密码生成器 2、判断用户是否设置了复杂的密码 在注册页面注册一个,用简单密码看是否可以注册成功 3、网站是…...

程序无法启动,提示“找不到msvcp140.dll”或“msvcp140.dll缺失报错”解决方法

大家好&#xff01;今天我来给大家分享一下msvcp140.dll丢失的解决方法。我们都知道&#xff0c;在运行一些软件或游戏时&#xff0c;经常会遇到“找不到msvcp140.dll”的错误提示&#xff0c;这会让我们非常苦恼。那么&#xff0c;这个问题该怎么解决呢&#xff1f;下面我将为…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...