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

相关推荐
鹏程十八少10 分钟前
Android TransactionTooLargeException 的真相与修复:从 1.13MB Bundle 到 Binder 内核的完整剖析
前端·后端·面试
geovindu14 分钟前
go: Monitor Pattern
开发语言·后端·设计模式·golang·监控模式
小米渣的逆袭16 分钟前
C++面试题整理
c++·面试
小为资料库16 分钟前
2026上教资面试历年真题汇总及结构化题库PDF电子版(含小学、初中和高中各科全)
面试·职场和发展·pdf
ZHOUPUYU31 分钟前
PHP 开发实战:从零搭建一个高性能的 RESTful API 服务
运维·开发语言·后端·html·php
身如柳絮随风扬33 分钟前
除了 JWT,你还用过哪些认证方案?Spring Security 中如何集成 JWT?
java·后端·spring
techdashen38 分钟前
Rust 能帮你捕获什么,又不能捕获什么
开发语言·后端·rust
YOU OU38 分钟前
Spring MVC 练习项目
java·后端·spring
Spider Cat 蜘蛛猫10 小时前
Springboot SSO系统设计文档
java·spring boot·后端
weixin_4217252610 小时前
Linux 编程语言全解析:C、C++、Python、Go、Rust 谁更强?
linux·python·go·c·编程语言