Go 字符串格式化

字符串格式化可以帮助我们节省时间,解决复杂任务

例如,如果我们需要把十进制数 100000 的十六进制值打印到控制台(它的十六进制是 186a0 ),通常我们不会手动去计算并输入这个值。

我们可以使用 字符串格式化 来更方便地完成这个任务。

在本节中,我们将学习如何在 Go 中使用字符串格式化。总体来说,有两种方式:

  1. 使用 Printf() 函数直接打印格式化字符串

  2. 使用 Sprintf() 函数格式化并返回字符串,而不是直接打印

这两种方法都位于 fmt 包中。


fmt.Printf() 简介

fmt.Printf() 至少接受一个参数。最简单的用法是把它当作 fmt.Print() 的替代品:

go 复制代码
fmt.Printf("kitty1\nkitty2")
fmt.Printf("\n")
fmt.Printf("kitty1\tkitty2")

输出结果:

go 复制代码
kitty1
kitty2

kitty1    kitty2

代码说明

  • \n 表示换行

  • \t 表示制表符(Tab)

  • Printf 会解析这些转义字符


使用格式化模板

在大多数情况下,我们会给 fmt.Printf() 传入 两个或更多参数

  • 第一个参数:字符串模板(包含普通文本和格式化动词)

  • 后续参数:用于替换模板中格式化动词的变量

示例:

go 复制代码
s := "Golang"
a := "young"
fmt.Printf("We are %s hackers, we are so %s", s, a)

输出:

go 复制代码
We are Golang hackers, we are so young

代码说明

  • %s 是字符串格式化动词

  • 按顺序用 sa 的值替换 %s

注意:fmt 包中f 结尾的函数通常都支持格式化字符串功能。


使用不同的格式化动词

数值格式化

go 复制代码
fmt.Printf("%d", 36)

输出:

go 复制代码
36
  • %d 用于打印整数(int)
浮点数格式化
go 复制代码
fmt.Printf("%f", 20.66)

输出:

go 复制代码
20.660000
go 复制代码
fmt.Printf("%.1f", 20.33)

输出:

go 复制代码
20.3

代码说明

  • %f 用于浮点数

  • .1 表示保留 1 位小数

  • 若不指定精度,Go 使用默认精度(6 位小数)


字符、字符串和布尔值

go 复制代码
letter := 't'
fmt.Printf("%c", letter) // t

secret := '🤫'
fmt.Printf("%c", secret) // 🤫
  • %c 用于单个字符(包括 Unicode 字符)
go 复制代码
fmt.Printf("%s", "This is a random string")
  • %s 用于字符串
go 复制代码
fmt.Printf("%t", false)
  • %t 用于布尔值

设置字符串宽度

go 复制代码
fmt.Printf("|%8s|", "pikachu")

输出:

go 复制代码
| pikachu|

代码说明

  • %8s 表示字符串总宽度为 8

  • 如果字符串长度不足,会在左侧补空格


输出百分号 %

go 复制代码
fmt.Printf("%%")

输出:

go 复制代码
%

显式参数索引(调整顺序或重复使用)

有时我们希望:

  • 多次使用同一个变量

  • 调整变量的输出顺序

可以使用 方括号 [] 指定参数索引

go 复制代码
a := "First variable"
b := "Second variable"

fmt.Printf("%[1]s | %[1]s \n", a)
fmt.Printf("%[2]s | %[1]s", a, b)

输出:

go 复制代码
First variable | First variable
Second variable | First variable

代码说明

  • %[1]s 表示使用第 1 个参数

  • %[2]s 表示使用第 2 个参数

  • 索引从 1 开始


默认动词 %v

%v默认格式化动词,非常通用。

当你不知道该用哪个动词时,可以直接用 %v

go 复制代码
fmt.Printf("%v", '😄')                 // 128516(Unicode 编码)
fmt.Printf("%v", "世界")               // 世界
fmt.Printf("%v", []int{1,2,3,4,5,6})   // [1 2 3 4 5 6]
fmt.Printf("%v", [3]int{9,8,7})        // [9 8 7]
fmt.Printf("%v", 1+5i)                 // 1+5i

说明

  • %v 可以打印:

    • Unicode 字符的数值

    • 数组、切片

    • 复数

    • 各种复杂类型


fmt 包中的其他函数

Sprintf()

Sprintf() 不会打印 ,而是返回格式化后的字符串

go 复制代码
first := fmt.Sprintf("%d", 500)
binaryVariable := fmt.Sprintf("%b", 500)

结果:

  • first = "500"

  • binaryVariable = "111110100"


Print / Sprint / Println / Sprintln

  • Print() / Sprint() 使用默认动词 %v

  • S 开头:返回字符串

  • ln 结尾 :自动添加换行符 \n

Print 示例:
go 复制代码
fmt.Print("Hello")

x := "World"
fmt.Print("Hello, ", x)

输出:

go 复制代码
HelloHello, World
Sprintln 示例:
go 复制代码
s := fmt.Sprintln(
    "if you try to print s,",
    "it will automatically print a new line at the end of the string",
)

fmt.Print(s, "Newline")

输出:

go 复制代码
if you try to print s, it will automatically print a new line at the end of the string
Newline

使用反引号格式化多行字符串(原始字符串)

Go 支持 原始字符串字面量 ,使用反引号 ... 包裹:

go 复制代码
fmt.Printf(`%s 
and
the
brave
new\n
world\n`, "Go")

输出:

go 复制代码
Go 
and
the
brave
new\n
world\n

说明

  • 反引号中的内容 不会解析转义字符

  • \n 会被原样输出


总结

在本节中,我们学习了:

  • Go 使用 fmt 包进行字符串格式化

  • Printf()Sprintf() 的区别

  • 常用格式化动词(%d%f%s%v 等)

  • 参数索引 %[n]

  • Print / Println / Sprint / Sprintln

  • 使用反引号编写多行字符串

在实际开发中,正确地格式化字符串可以让代码更加整洁、可读性更强。

相关推荐
Legendary_00823 分钟前
LDR6500:USB‑C DRP PD协议芯片技术详解与应用实践
c语言·开发语言
xiaobaoyu31 分钟前
ssm知识点梳理
后端
2301_800976931 小时前
正则表达式
开发语言·python·正则表达式
故事还在继续吗1 小时前
C++20关键特性
开发语言·c++·c++20
IT_陈寒1 小时前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
浮游本尊1 小时前
合同同步逻辑
后端
子兮曰1 小时前
别让爬虫白嫖你的导航站了:纯免费,手把手实现加密字体防爬
前端·javascript·后端
阿苟1 小时前
JAVA重点难点
后端
青少儿编程课堂2 小时前
2026青少儿信息素养大赛备赛指南!Python/Scratch/C++备考要点
开发语言·c++·python
uzong2 小时前
TIOBE 指数:2026 年编程语言排行榜
后端