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

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

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

最基础的输出函数是 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 的核心能力可以总结为三类:第一类是输出函数,例如 Print、Println、Printf;第二类是字符串构建函数,例如 Sprintf;第三类是输入解析函数,例如 Scan、Scanln、Scanf。这些函数共同构成了 Go 最基础的输入输出工具体系。

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

相关推荐
狂师16 分钟前
我开发了一款免费开源的测试开发刷题学习网站
面试·开源·测试
实名上网宋凯宣9 小时前
Django
后端·python·django
我不会起名字32210 小时前
Redis 从 0 到 1(十七):订单 30 分钟不支付自动关闭——ZSet 延迟队列 Go 实现
redis·go·延迟队列·zset·订单
利威尔xu11 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
逃逸线LOF12 小时前
Ribbon负载均衡原理(Irule组件、源码分析)
后端·spring cloud·ribbon
慢云智慧空间12 小时前
从设备智能到空间理解,空间智能终端解决方案商如何重新定义行业标准
后端
利威尔xu12 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
薛定谔的猫-菜鸟程序员13 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
FungLeo13 小时前
成为全栈·Go 后端篇·从 Node SQLite 到 PostgreSQL:把迁移做成独立交付物
postgresql·golang·sqlite·go·数据库迁移·成为全栈