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

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

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

相关推荐
方璧30 分钟前
限流的算法
java·开发语言
Hi_kenyon1 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终1 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
奋进的芋圆1 小时前
DataSyncManager 详解与 Spring Boot 迁移指南
java·spring boot·后端
ghie90901 小时前
基于MATLAB GUI的伏安法测电阻实现方案
开发语言·matlab·电阻
Gao_xu_sheng2 小时前
Inno Setup(专业安装/更新 EXE)
开发语言
计算机程序设计小李同学2 小时前
个人数据管理系统
java·vue.js·spring boot·后端·web安全
Echo娴2 小时前
Spring的开发步骤
java·后端·spring
追逐时光者2 小时前
TIOBE 公布 C# 是 2025 年度编程语言
后端·.net