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

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

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

相关推荐
古城小栈2 小时前
2025 Go 语言生态:从云原生到边缘计算
云原生·golang·边缘计算
小年糕是糕手2 小时前
【C++同步练习】内存管理
开发语言·jvm·数据结构·c++·程序人生·算法·改行学it
Dev7z2 小时前
基于MATLAB的5G通信信号频谱分析与信道性能仿真研究
开发语言·5g·matlab
波波0072 小时前
使用.NET 四步玩转 AI 绘图|不用Python、不买显卡
开发语言·c#·.net
tbRNA2 小时前
C++基础知识点(六)类和对象
开发语言·c++
JaguarJack2 小时前
PHP 8.6 新增 clamp() 函数
后端·php
小此方2 小时前
Re:从零开始学C++(二)基础精讲·下篇:内联函数与空指针
开发语言·c++
心.c2 小时前
初步了解Next.js
开发语言·前端·javascript·js
桃花岛主702 小时前
go-micro,v5启动微服务的正确方法
开发语言·后端·golang