Go字符串与数值转换核心库: strconv深度解析

在 Go 语言开发中,最常使用的标准库之一就是 fmt。无论是调试程序、打印日志、构建字符串,还是格式化输出数据,fmt 都扮演着非常重要的角色。fmt 的名字来源于 format(格式化) ,它主要用于实现格式化输入与输出功能。通过 fmt,开发者可以非常方便地把变量内容打印到终端、构建字符串、或者按照指定格式输出数据。

Go 的设计理念强调简单与统一,因此 fmt 的 API 设计非常清晰,常见函数包括 PrintPrintlnPrintfSprintfScan 等。理解这些函数的区别和使用方式,可以让日常开发效率大大提升。

最基础的输出函数是 fmt.Print()。它会把内容直接输出到标准输出(通常是终端),不会自动添加换行符。如果需要连续输出多个变量,可以把它们作为参数传入。

go 复制代码
package main

import "fmt"

func main() {
	fmt.Print("Hello ")
	fmt.Print("Go")
}

运行后终端输出:

复制代码
Hello Go

Print 类似的函数是 fmt.Println(),区别在于它会在输出内容后自动添加换行符,并且多个参数之间会自动加空格。这也是开发中最常用的打印方式。

go 复制代码
package main

import "fmt"

func main() {
	fmt.Println("Hello", "Go")
}

输出结果:

复制代码
Hello Go

如果需要更灵活的输出控制,例如指定变量类型或格式,就需要使用 fmt.Printf()。这个函数支持格式化字符串,类似 C 语言中的 printf。通过格式化占位符,可以控制变量的输出形式。

go 复制代码
package main

import "fmt"

func main() {
	name := "Alice"
	age := 25

	fmt.Printf("name: %s age: %d\n", name, age)
}

输出结果:

makefile 复制代码
name: Alice age: 25

Printf 的核心是格式化占位符,不同占位符代表不同类型。最常用的包括:

perl 复制代码
%s   字符串
%d   十进制整数
%f   浮点数
%t   布尔值
%v   默认格式
%T   变量类型

例如:

go 复制代码
num := 100
fmt.Printf("value: %v type: %T\n", num, num)

输出:

go 复制代码
value: 100 type: int

在实际开发中,%v 是非常常见的占位符,它会自动使用默认格式输出变量内容。如果需要更详细的信息,可以使用 %+v%#v%+v 会显示结构体字段名称,而 %#v 会输出 Go 语法格式的结构体。

go 复制代码
type User struct {
	Name string
	Age  int
}

u := User{"Tom", 30}

fmt.Printf("%v\n", u)
fmt.Printf("%+v\n", u)
fmt.Printf("%#v\n", u)

输出示例:

css 复制代码
{Tom 30}
{Name:Tom Age:30}
main.User{Name:"Tom", Age:30}

除了直接输出到终端,fmt 还可以把格式化内容生成字符串。例如 fmt.Sprintf()。这个函数不会打印内容,而是返回一个字符串。它在构建日志内容、生成 SQL 语句、构造 URL 或 JSON 字符串时非常实用。

go 复制代码
name := "Bob"
age := 20

msg := fmt.Sprintf("name=%s age=%d", name, age)

fmt.Println(msg)

输出:

ini 复制代码
name=Bob age=20

如果需要把格式化结果写入 io.Writer,例如文件或网络连接,可以使用 fmt.Fprintf()

go 复制代码
file, _ := os.Create("log.txt")

fmt.Fprintf(file, "log: %s\n", "system start")

这样输出内容就会写入文件,而不是终端。

除了输出功能,fmt 还提供了输入读取功能。例如 fmt.Scan() 可以从标准输入读取数据。这个函数常用于简单的 CLI 程序。

go 复制代码
var name string

fmt.Scan(&name)

fmt.Println("hello", name)

用户在终端输入:

复制代码
Alice

程序输出:

复制代码
hello Alice

如果需要按行读取输入,可以使用 fmt.Scanln()

go 复制代码
var name string
fmt.Scanln(&name)

fmt.Scanf() 则支持按照指定格式读取输入,例如:

go 复制代码
var name string
var age int

fmt.Scanf("%s %d", &name, &age)

用户输入:

复制代码
Tom 18

程序就会分别解析两个变量。

在调试程序时,fmt 还有一个非常实用的技巧,就是快速打印变量状态。例如:

go 复制代码
fmt.Printf("value=%v\n", value)

或者:

go 复制代码
fmt.Println("debug:", value)

在很多 Go 项目中,开发者都会用 fmt 进行临时调试输出。

fmt 还支持宽度和精度控制。例如格式化浮点数保留两位小数:

go 复制代码
price := 19.999

fmt.Printf("%.2f\n", price)

输出:

复制代码
20.00

也可以控制输出宽度:

go 复制代码
fmt.Printf("%10d\n", 100)

输出会占 10 个字符宽度:

markdown 复制代码
       100

如果在宽度前加 -,则表示左对齐:

go 复制代码
fmt.Printf("%-10d\n", 100)

输出:

复制代码
100

这种功能在构建表格输出或 CLI 工具时非常有用。

在实际项目中,fmt 的使用场景非常广泛。例如在 Web 服务中构建日志信息,在 CLI 工具中打印执行结果,在数据处理程序中生成格式化文本,或者在调试阶段输出变量状态。几乎每一个 Go 程序都会使用 fmt

从整体来看,fmt 的核心能力可以总结为三类:第一类是输出函数,例如 PrintPrintlnPrintf;第二类是字符串构建函数,例如 Sprintf;第三类是输入解析函数,例如 ScanScanlnScanf。这些函数共同构成了 Go 最基础的输入输出工具体系。

掌握 fmt 不仅能够提高代码的可读性,还可以让程序输出更加清晰、规范。在 Go 的标准库中,fmt 虽然看起来简单,但却是几乎所有程序都会依赖的基础组件。对于每一个 Go 开发者来说,熟练使用 fmt 是编写高质量代码的重要基础。

相关推荐
Java编程爱好者2 小时前
MySQL 时间类型选型避坑:timestamp 和 datetime 该怎么选?
后端
兆子龙2 小时前
Node.js 事件循环与 libuv 源码剖析:从 V8 到多线程 I/O
后端·架构
SimonKing2 小时前
震撼:Qoder 搭载Qwen3.2-Plus模型,5步实现完整的多数据源切换
java·后端·程序员
后端不背锅2 小时前
Docker 从入门到实战:容器化部署不再难
后端
写Cpp的小黑黑2 小时前
WebRTC 使用外部 OpenSSL 构建指南
后端
星浩AI2 小时前
OpenClaw 总是忘记你说过的话?来试试这个插件
人工智能·后端·agent
爱学习的小可爱卢2 小时前
RabbitMQ—消息元数据解析指南
后端·rabbitmq
后端不背锅2 小时前
Redis 缓存穿透、击穿、雪崩:一次讲清楚
后端