fmt
fmt 是 Go 语言的标准库之一,主要用于格式化和输出文本。它提供了多个函数,允许你以指定格式打印、扫描和处理字符串、数字、布尔值、错误等类型的数据。fmt 包常用于格式化输出和处理输入,类似于 C 语言中的 printf 和 scanf。
导入
package main
import (
"encoding/json"
)1. fmt 包常用函数
1.1 格式化输出:fmt.Printf, fmt.Println, fmt.Print
fmt.Print():输出指定的内容,但不自动换行。gofmt.Print("Hello") fmt.Print(" World")输出:
Hello Worldfmt.Println():输出指定的内容,并在末尾自动添加换行符。gofmt.Println("Hello") fmt.Println("World")输出:
Hello Worldfmt.Printf():按指定格式输出内容。gofmt.Printf("Name: %s, Age: %d\n", "John", 30)输出:
Name: John, Age: 30
1.2 格式化打印占位符
fmt.Printf 使用占位符来指定输出的格式,常见的占位符包括:
| 占位符 | 描述 |
|---|---|
%s | 字符串 |
%d | 十进制整数 |
%f | 浮动小数 |
%v | 默认格式(适用于大多数类型) |
%T | 类型的 Go 语言表示形式 |
%x | 十六进制表示整数 |
%b | 二进制表示整数 |
%p | 指针地址 |
%t | 布尔值(true 或 false) |
%c | 输出字符(对应的 Unicode 值) |
示例:
package main
import "fmt"
func main() {
name := "Alice"
age := 25
height := 5.9
isStudent := true
// 使用不同的占位符格式化输出
fmt.Printf("Name: %s\n", name)
fmt.Printf("Age: %d\n", age)
fmt.Printf("Height: %.2f\n", height)
fmt.Printf("Is Student: %t\n", isStudent)
fmt.Printf("Type of name: %T\n", name)
fmt.Printf("Hexadecimal of age: %x\n", age)
}输出:
Name: Alice
Age: 25
Height: 5.90
Is Student: true
Type of name: string
Hexadecimal of age: 191.3 高级格式化功能
宽度和精度:可以通过格式化占位符指定输出宽度和精度。
gofmt.Printf("|%-10s|%-10s|\n", "Name", "Age") fmt.Printf("|%10s|%10d|\n", "Alice", 25)输出:
|Name |Age | | Alice| 25|浮动数的精度:可以指定浮动数的精度(小数点后的位数)。
gofmt.Printf("Height: %.2f\n", 5.9876)输出:
Height: 5.99填充符:指定输出的填充字符(默认是空格)。
gofmt.Printf("|%*s|\n", 10, "Hi") fmt.Printf("|%-*s|\n", 10, "Hi")输出:
| Hi| |Hi |
1.4 格式化打印结构体和数组
对于结构体,使用
%+v可以输出字段名称。gotype Person struct { Name string Age int } p := Person{"John", 30} fmt.Printf("%+v\n", p)输出:
{Name:John Age:30}对于数组或切片,使用
%v或%#v(包含类型信息)进行输出。goarr := []int{1, 2, 3} fmt.Printf("%v\n", arr) fmt.Printf("%#v\n", arr)输出:
[1 2 3] []int{1, 2, 3}
2. 输入函数:fmt.Scan, fmt.Scanf, fmt.Scanln
Go 的 fmt 包也提供了从标准输入读取数据的功能,常见的输入函数包括:
fmt.Scan():读取输入的内容,按空格分隔输入数据,并存储到对应的变量中。govar name string var age int fmt.Scan(&name, &age) fmt.Printf("Name: %s, Age: %d\n", name, age)fmt.Scanln():与fmt.Scan()类似,但它会在读取输入时遇到换行符时停止。govar name string fmt.Scanln(&name) fmt.Printf("Hello, %s!\n", name)fmt.Scanf():通过格式化字符串读取输入内容。类似于fmt.Printf,它会根据格式化字符串的规则解析输入。govar name string var age int fmt.Scanf("%s %d", &name, &age) fmt.Printf("Name: %s, Age: %d\n", name, age)
3. fmt 的常见使用场景
打印调试信息:在开发过程中,可以使用
fmt.Printf输出变量的值和类型,帮助调试。gofmt.Printf("Value: %v, Type: %T\n", someVariable, someVariable)格式化输出:
fmt.Printf用于生成格式化的输出结果,适用于报告、日志和终端命令行程序。gofmt.Printf("Total: %.2f\n", totalAmount)控制输入:
fmt.Scan和fmt.Scanf可用于读取用户输入的内容,根据输入内容执行不同操作。
4. 注意事项
错误处理:
fmt.Scan()和fmt.Scanf()函数会返回错误,因此在使用时应检查错误。govar name string _, err := fmt.Scan(&name) if err != nil { fmt.Println("Error:", err) }格式化输出时的类型匹配:确保在
fmt.Printf等函数中使用的格式化符号与传入的变量类型匹配。例如,使用%d格式符输出整数,使用%f输出浮点数。
5. 小结
fmt包提供了强大的格式化输出和输入功能,帮助开发者灵活地处理不同类型的数据。- 通过格式化占位符,你可以控制输出内容的格式,精确控制输出的宽度、对齐、精度等。
- 输入相关函数(如
fmt.Scan、fmt.Scanf)则帮助你处理来自用户的输入。
掌握 fmt 包的使用可以显著提高你在 Go 语言开发中的效率,尤其在输出调试信息、日志、用户交互等场景下十分有用。