字符串与字符编码 - 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”的错误提示,这会让我们非常苦恼。那么,这个问题该怎么解决呢?下面我将为…...
Qwen3-32B保姆级教程:API服务curl调用示例+JSON Schema响应结构说明
Qwen3-32B保姆级教程:API服务curl调用示例JSON Schema响应结构说明 1. 环境准备与快速部署 本教程基于RTX 4090D 24GB显存优化版的Qwen3-32B私有部署镜像,该镜像已预装完整运行环境与模型依赖,开箱即用。 1.1 硬件要求 显卡:必…...
丹青识画GPU优化实践:TensorRT加速OFA视觉编码器推理提速2.3倍
丹青识画GPU优化实践:TensorRT加速OFA视觉编码器推理提速2.3倍 1. 引言:当艺术鉴赏遇见计算瓶颈 想象一下,你站在一幅山水画前,系统需要像一位博学的鉴赏家,在瞬间理解画面的意境、识别其中的元素,并用行…...
巧用CAD与GIS工具:将地方坐标系图纸精准校正至国家2000
1. 地方坐标系与国家2000的转换难题 刚接手一个市政项目时,我发现设计院提供的CAD图纸用的居然是地方坐标系。当时就懵了——这玩意儿怎么跟国家2000坐标系的标准地图叠加啊?后来才知道,这种情况在设计行业还挺常见的。很多老项目用的都是地方…...
Ubuntu 20.04上构建Zabbix 6.0监控平台:从部署到微信告警的完整实践
1. 环境准备与基础配置 在Ubuntu 20.04上部署Zabbix 6.0监控平台前,需要确保系统环境满足基本要求。我建议使用至少4核CPU、8GB内存的服务器,实测下来这个配置可以稳定监控50台以上的主机。操作系统建议选择Ubuntu 20.04 LTS版本,长期支持周期…...
Windows/Mac双平台实测:SSH密钥配置避坑指南(含GitHub443端口解决方案)
Windows/Mac双平台SSH密钥配置全攻略:从生成到故障排除 SSH密钥认证是开发者与GitHub、GitLab等代码托管平台交互的安全基石。不同于密码认证的繁琐与安全隐患,密钥认证提供了更高效、更安全的身份验证方式。本文将深入探讨Windows和Mac双平台下的SSH密钥…...
实测对比|Cursor Free vs Pro:为什么我劝你升级到 Pro 会员?
标题: 《亲测一个月后,我决定为 Cursor Pro 买单:Claude 4.5 真的值回票价!》 正文: 作为一名全栈开发者,我每天依赖 Cursor 进行快速原型开发。但免费版偶尔会出现“答非所问”、“上下文断裂”等问题。…...
MusePublic作品集:看看AI生成的这些艺术感时尚人像有多美
MusePublic作品集:看看AI生成的这些艺术感时尚人像有多美 1. 惊艳的艺术人像生成效果 当我第一次看到MusePublic生成的艺术人像时,确实被惊艳到了。这些图像不仅细节丰富、光影自然,更重要的是它们带有一种独特的艺术气质,就像专…...
雪女-斗罗大陆-造相Z-Turbo开箱即用:无需复杂配置,直接生成雪女图像
雪女-斗罗大陆-造相Z-Turbo开箱即用:无需复杂配置,直接生成雪女图像 1. 快速体验:三步生成你的专属雪女 1.1 一键部署,无需复杂配置 雪女-斗罗大陆-造相Z-Turbo镜像已经预装了所有必要的运行环境和模型文件,真正实现…...
Qwen-Image惊艳作品集:基于24GB显存生成的高精度图文推理结果可视化
Qwen-Image惊艳作品集:基于24GB显存生成的高精度图文推理结果可视化 1. 开篇:认识Qwen-Image视觉语言模型 Qwen-Image是通义千问推出的多模态大模型,能够同时理解图像和文本信息。想象一下,当你给这个模型看一张照片,…...
Vue站点安全指南:如何利用Vue Devtools插件快速发现路由漏洞
Vue站点安全自查实战:用Devtools深度挖掘路由隐患 在当今快速迭代的前端开发中,Vue.js因其灵活性和高效性成为众多开发者的首选框架。然而,随着应用复杂度提升,路由安全问题往往成为容易被忽视的"沉默杀手"。一次偶然的…...
