如何在Go中格式化字符串

news/2025/3/31 12:07:15/

由于字符串通常由书面文本组成,在很多情况下,我们可能希望通过标点符号、换行和缩进来更好地控制字符串的外观,以使其更易于阅读。

在本教程中,我们将介绍一些处理go字符串的方法,以确保所有输出文本的格式正确。

字符串字面量

让我们首先区分字符串字面量字符串值。字符串字面量就是我们在计算机程序的源代码中看到的,包括引号。当我们调用fmt.Println函数并运行程序时,我们看到的是一个字符串。

在“Hello, World!”程序中,字符串字面量是"Hello, World!",而字符串值是 Hello, World!,没有引号。这个字符串值就是我们运行Go程序时在终端窗口中看到的输出。

但是有些字符串值可能需要包含引号,比如我们引用一个源时。因为字符串字面量和字符串值并不相等,所以通常有必要为字符串字面量添加额外的格式,以确保字符串值按我们想要的方式显示。

引号

因为我们可以在Go中使用反引号(`)或双引号("),通过在由反引号括起来的字符串中使用双引号,可以很简单地在字符串中嵌入引号:

`Sammy says, "Hello!"`

或者,要使用后引号,可以将字符串括在双引号中:

"Sammy likes the `fmt` package for formatting strings.."

通过使用反引号和双引号,我们可以控制字符串中引号和反引号的显示。

重要的是要记住,在Go中使用反引号会创建一个raw字符串字面量,而使用双引号会创建一个interpret 字符串字面量。

转义字符

另一种格式化字符串的方法是使用转义字符。转义字符用于告诉代码下面的字符具有特殊的含义。转义字符都以反斜杠键(\)和字符串中的另一个字符开始,以某种方式格式化给定的字符串。

下面列出了一些常见的转义字符:

转义字符它如何格式化
|反斜线
"双引号
\n换行符
\tTab(水平缩进)

让我们使用转义字符将引号添加到上面的引号示例中,但这一次我们将使用双引号来表示字符串:

fmt.Println("Sammy says, \"Hello!\"")
OutputSammy says, "Hello!"

通过使用转义字符\",我们可以使用双引号将包含在双引号中文本的字符串括起来。

我们可以使用 \n 转义字符来换行,而无需键入回车键或回车键:

fmt.Println("This string\nspans multiple\nlines.")
OutputThis string
spans multiple
lines.

我们也可以组合转义字符。下面来打印一个多行字符串,并包含分项列表的制表符间距,例如:

fmt.Println("1.\tShark\n2.\tShrimp\n10.\tSquid")
Output1.      Shark
2.      Shrimp
10.     Squid

在前面的例子中,\t转义字符提供的水平缩进确保了在第二列内对齐,使输出非常易读。

转义字符用于为字符串添加额外的格式,这些格式可能很难或不可能实现。如果没有转义字符,你将无法构造字符串Sammy says, "I like to use the `fmt` package"

多行

将字符串打印成多行可以提高文本的可读性。对于多行,字符串可以组合成干净有序的文本,格式化为字母,或用于保持诗歌或歌曲歌词的换行。

要创建跨多行的字符串,需要使用反引号将字符串括起来。请记住,虽然这将保留行返回,但它也创建了一个raw字符串字面量。

`
This string is on 
multiple lines
within three single 
quotes on either side.
`
Output
This string is on 
multiple lines
within three single 
quotes on either side.

为了避免这种情况,你需要将第一行放在后引号的后面,并以后引号结束最后一行。

`This string is on 
multiple lines
within three single 
quotes on either side.`

如果你需要创建一个解释过的字符串字面量,可以使用双引号和+操作符,但你需要插入自己的换行符。

"This string is on\n" +
"multiple lines\n" +
"within three single\n" +
"quotes on either side."

虽然反引号可以使长文本更容易打印和阅读,但如果你需要一个经过解释的字符串字面量,就需要使用双引号。

原始字符串字面量

如果我们不希望字符串具有特殊的格式,该怎么办?例如,我们可能需要比较或计算有意使用反斜杠的计算机代码字符串,因此我们不希望将它用作转义字符。

原始字符串字面量告诉Go忽略字符串中的所有格式,包括转义字符。

我们使用反引号来创建一个原始字符串:

fmt.Println(`Sammy says,\"The balloon\'s color is red.\"`)
OutputSammy says,\"The balloon\'s color is red.\"

通过在给定字符串的两边使用反引号来构造原始字符串,我们可以保留反斜杠和其他用作转义字符的字符。

总结

本教程介绍了在Go中格式化文本的几种方法。通过使用转义字符或原始字符串等技术,我们能够确保程序的字符串在屏幕上正确呈现,以便最终用户能够轻松地阅读所有输出的文本。


http://www.ppmy.cn/news/1135161.html

相关文章

MySQL-MVCC(Multi-Version Concurrency Control)

MySQL-MVCC(Multi-Version Concurrency Control) MVCC(多版本并发控制):为了解决数据库并发读写和数据一致性的问题,是一种思想,可以有多种实现方式。 核心思想:写入时创建行的新版…

Linux命令(93)之head

linux命令之head 1.head介绍 linux命令head用来查看文件的前N行内容;默认head查看前10行 2.head用法 head [参数] 文件 head常用参数 参数说明-n从头显示N行,默认显示10行,可以不写-q隐藏文件名,在查看两个及以上文件名的情况…

RDB 做快照的时候数据能修改吗?

在 Redis 执行 RDB 快照(快照持久化)期间,Redis 主线程会阻塞,这意味着在快照持久化操作进行时,Redis 不能处理其他客户端的写入操作。因此,通常情况下,当 Redis 正在执行 RDB 快照时,不应该对数据进行修改。 在 RDB 快照过程中,Redis 主线程会按顺序遍历整个数据集,…

正确完成实时 AI

发表于 构建真实世界的实时 AI 一、说明 我们知道,当前的AI进展是扎根于历史数据,这就造成一个事实,模型总是赶不上实时进展,模型的洞察力不够尖锐,或者,时间损失等,本篇对这一系列AI的短板展开…

计算机网络 第一章计算机网络体系结构

非常好的课程。计算机网络 //----------------------------------------------------------------------------------------------------------------// 需要清楚实体、协议、服务。 网络协议三要素,语法、语义、同步。

HIC-YOLOv5:改进的YOLOv5,用于小物体检测

文章目录 摘要1、简介2、相关工作3、方法4、实验结果5、结论摘要 论文链接:https://arxiv.org/pdf/2309.16393.pdf 小目标检测一直是目标检测领域的一个具有挑战性的问题。有一些工作提出了针对此任务的改进,例如添加多个注意力块或更改特征融合网络的整个结构。然而,这些模…

【C++】基础语法(学习笔记)

一、编译型语言 1、编程语言的层次和类型 机器(Machine)语言,如汇编语言编译型语言,如C,C解释型语言,如Basic,Python脚本语言,如bash,csh 从上到下使用层次,更接近于人类使用&…

登录注册实现

一、前端页面注册到Vue 1.创建登录和注册组件 <template><div>login</div></template><script> export default {name: HomeView,data() {return {}},methods: {}, } </script><template><div>register</div></tem…