字符串与字符编码 - 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”的错误提示,这会让我们非常苦恼。那么,这个问题该怎么解决呢?下面我将为…...
分布式系统智能告警治理:开源AIOps平台技术架构深度解析
分布式系统智能告警治理:开源AIOps平台技术架构深度解析 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 随着微服务和云原生架构的普及,分布式系统的监控告…...
资本可以复制流量,却复制不了《凰标》的天命@凤凰标志
——《凰标》为何无法被批量复刻?一、资本逻辑:无限复制与批量复刻可复制元素资本操作手法结果爆款剧情换皮翻拍同质化内容泛滥流量模式买量算法短期数据狂欢国风外壳元素拼贴文化“快餐”营销套路热搜话题转瞬即逝的热度 资本的核心能力,是复…...
ComfyUI-Impact-Pack终极指南:快速掌握AI图像增强的完整教程
ComfyUI-Impact-Pack终极指南:快速掌握AI图像增强的完整教程 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: ht…...
新媒体编辑提效:OpenClaw批量剪辑短视频、生成文案字幕,适配多平台发布规则
新媒体编辑效率革命:OpenClaw赋能短视频批量剪辑、智能文案生成与多平台适配在信息爆炸、注意力稀缺的移动互联网时代,短视频已成为内容传播的绝对主力军。对于新媒体运营团队而言,高效地产出高质量、符合各平台调性且能快速发布的短视频内容…...
电源设计和效率优化案例C01
本文重点讲清楚三个非常重要的问题: 手把手教会计算电源的效率计算,包括线性电源和开关电源等 1-电源的上下管的 Qg和Rdson为什么是一对矛盾量? 2-单相30A的电流输出电源要求,对上下管子应该如何取舍这两个参数,为什么? 电源设计是硬件设计的核心组成部分,尤其事目前…...
云数据中心能效优化:集成资源管理与学习中心管理的实战指南
1. 项目概述:当云计算撞上“能耗墙”,我们如何破局?干了十几年IT,从自建机房到全面上云,我亲眼见证了云计算如何重塑整个行业。它确实像电力网络和公路一样,成了现代社会不可或缺的基础设施。但这些年&…...
AI写作净化器:识别与消除AI文本痕迹的实用指南
1. 项目概述:为什么我们需要一个“AI写作净化器”? 如果你和我一样,每天都要和AI助手打交道,无论是用它写邮件、生成报告,还是草拟技术文档,那你一定对那种“AI味儿”深有体会。那种感觉就像喝了一杯过度调…...
混元图像3.0:多模态联合表征驱动的视觉逻辑引擎
1. 项目概述:这不是又一个“图生图”玩具,而是一次底层能力的重新定义“混元:发布图像3.0图生图模型,总参数量80亿”——这个标题里藏着三个被多数人忽略的关键信号:“图像3.0”不是版本号,是代际跃迁的命名…...
抖音下载器:三步实现无水印高清素材批量获取
抖音下载器:三步实现无水印高清素材批量获取 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批…...
制造业财务场景AI自动化方案,主流厂商横向对比 —— 2026企业级智能体选型全景盘点
进入2026年,全球制造业正处于从“自动化”向“智能共生”跨越的关键节点。 财务部门作为企业的数据中枢,其AI自动化方案已不再局限于早期的OCR识别或简单的流程脚本。 随着大模型(LLM)与智能体(Agent)技术的…...
