引入
写程序总要把结果输出到终端,或者从终端读取用户输入。Go 的 fmt 包就是干这件事的——格式化输入输出。不管是调试打印、日志输出还是读取用户输入,fmt 包都是用得最多的标准库之一。
正文
定义
定义
fmt包提供格式化输入输出功能。输出函数把数据按指定格式打印到终端,输入函数从终端读取用户输入。格式化通过占位符(如%d、%s)控制数据的显示方式。
语法
import "fmt"
// 输出
fmt.Println("hello") // 打印并换行
fmt.Printf("age: %d\n", 20) // 格式化打印
s := fmt.Sprintf("name: %s", "Tom") // 格式化到字符串
// 输入
var name string
fmt.Scan(&name) // 从终端读取一个值例子
Println
fmt.Println("hello") // hello
fmt.Println("a", "b", "c") // a b c(自动加空格)
fmt.Println(1, 2, 3) // 1 2 3Println 自动在参数间加空格,末尾加换行符。适合快速调试输出。
Printf
fmt.Printf("名字: %s, 年龄: %d\n", "Tom", 20)
// 名字: Tom, 年龄: 20
fmt.Printf("价格: %.2f\n", 3.1415)
// 价格: 3.14
fmt.Printf("类型: %T\n", 42)
// 类型: intPrintf 不会自动换行,需要手动加 \n。通过占位符控制每个值的显示格式。
Sprintf
s := fmt.Sprintf("%s is %d years old", "Tom", 20)
fmt.Println(s) // Tom is 20 years old
msg := fmt.Sprintf("进度: %.1f%%", 75.5)
fmt.Println(msg) // 进度: 75.5%Sprintf 和 Printf 用法一样,区别是返回字符串而不是打印到终端。
Scan
var name string
var age int
fmt.Print("输入名字: ")
fmt.Scan(&name)
fmt.Print("输入年龄: ")
fmt.Scan(&age)
fmt.Printf("你好 %s,你 %d 岁了\n", name, age)Scan 从终端读取输入,以空格或换行分隔。传的是变量指针(&),读到的值直接写入变量。
常用占位符
fmt.Printf("%d\n", 42) // 42(十进制整数)
fmt.Printf("%b\n", 42) // 101010(二进制)
fmt.Printf("%x\n", 255) // ff(十六进制)
fmt.Printf("%f\n", 3.14) // 3.140000(浮点数)
fmt.Printf("%.2f\n", 3.1415) // 3.14(保留两位小数)
fmt.Printf("%s\n", "hello") // hello(字符串)
fmt.Printf("%q\n", "hello") // "hello"(带引号的字符串)
fmt.Printf("%v\n", 42) // 42(默认格式)
fmt.Printf("%+v\n", person) // 带字段名的结构体
fmt.Printf("%T\n", 42) // int(类型)
fmt.Printf("%p\n", &x) // 0xc0000...(指针地址)常见写法
| 函数/占位符 | 说明 |
|---|---|
fmt.Println(a, b) | 打印并换行,参数间自动加空格 |
fmt.Printf("%d", v) | 格式化打印,不自动换行 |
fmt.Sprintf("%s", v) | 格式化到字符串 |
fmt.Scan(&v) | 从终端读取一个值 |
fmt.Scanf("%d", &v) | 按格式从终端读取 |
fmt.Sscanf(s, "%d", &v) | 按格式从字符串读取 |
%d | 十进制整数 |
%f / %.2f | 浮点数 / 保留小数位 |
%s | 字符串 |
%v | 默认格式 |
%T | 值的类型 |
%q | 带引号的字符串 |
%x | 十六进制 |
%+v | 结构体带字段名 |
特点
Println自动换行加空格,Printf不自动换行,需要手动\nSprintf返回字符串,不打印到终端,适合拼接格式化文本Scan传的是指针,用&取地址%v是万能占位符,能打印任何类型的默认格式%+v打印结构体时带字段名,调试时特别有用%T能打印值的类型信息,排查类型问题很方便fmt.Errorf()用格式化字符串创建错误值,在 Go 错误处理 里常用
理解
fmt 包就是 Go 的”打印工具箱”。日常调试用 Println 最省事,需要控制格式用 Printf + 占位符,要拼字符串用 Sprintf。占位符记住几个常用的就够了:%d 整数、%f 浮点、%s 字符串、%v 万能、%T 看类型。Scan 系列用得相对少,大部分时候输入来自文件或网络而不是终端。
引出
Sprintf 能格式化输出,但如果要对字符串本身做查找、替换、分割等操作,就需要专门的字符串处理工具。接下来看 Go strings 包,学习 strings 包里的字符串操作函数。