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 是编写高质量代码的重要基础。

相关推荐
嘉伟桑1 小时前
Python调用电价API返回JSON示例:分时电价、现货电价和字段解析
后端
武子康2 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
我叫黑大帅2 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试
吃饱了得干活2 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
AskHarries2 小时前
文件上传系统
后端
止语Lab3 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活3 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
fcu3dx3 小时前
Go + PostgreSQL 餐饮SaaS后端架构:从单体到多租户的实战重构
go
程序员天天困3 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn3 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端