格式化方法
| 函数 | 说明 |
|---|---|
| 输出字符串到控制台 | |
| Printf | 解析占位符并格式化输出字符串到控制台 |
| Println | 输出字符串到控制台并换行 |
| Errorf | 格式化并返回一个错误对象 |
| FormatString | (注:fmt包无此导出函数,通常指Sprintf) |
| Fprint | 输出到指定的 io.Writer |
| Fprintf | 格式化输出到指定的 io.Writer |
| Fprintln | 输出到指定的 io.Writer 并换行 |
| Fscan | 从指定的 io.Reader 扫描输入 |
| Fscanf | 从指定的 io.Reader 格式化扫描输入 |
| Fscanln | 从指定的 io.Reader 扫描一行输入 |
| Scan | 从标准输入扫描数据 |
| Scanf | 从标准输入格式化扫描数据 |
| Scanln | 从标准输入扫描一行数据 |
| Sprint | 格式化并返回字符串 |
| Sprintf | 格式化并返回字符串 |
| Sprintln | 格式化并返回字符串(带空格和换行) |
| Sscan | 从字符串扫描数据 |
| Sscanf | 从字符串格式化扫描数据 |
| Sscanln | 从字符串扫描一行数据 |
代码示例
go
package main
import (
"fmt"
"os"
"strings"
)
func main() {
// 1. Print: 输出字符串到控制台
fmt.Print("Print")
// 2. Printf: 解析占位符并格式化输出字符串到控制台
fmt.Printf("\nPrintf: %d + %d = %d\n", 1, 2, 3)
// 3. Println: 输出字符串到控制台并换行
fmt.Println("Println")
// 4. Errorf: 格式化并返回一个错误对象
err := fmt.Errorf("connection failed: %s", "timeout")
fmt.Printf("Error: %v\n", err)
// 5. Sprintf (对应表格中的 FormatString 概念): 格式化并返回字符串
str := fmt.Sprintf("ID: %05d, Name: %s", 123, "Alice")
fmt.Printf("Sprintf Result: %s\n", str)
// 6. Fprint: 输出到指定的 io.Writer (例如 os.Stdout 或 文件)
fmt.Fprint(os.Stdout, "Fprint: Hello to stdout\n")
// 7. Fprintf: 格式化输出到指定的 io.Writer
fmt.Fprintf(os.Stdout, "Fprintf: User %s logged in at %d\n", "Bob", 2026)
// 8. Fprintln: 输出到指定的 io.Writer 并换行
fmt.Fprintln(os.Stdout, "Fprintln: Simple line to stdout")
// 9. Sprint: 格式化并返回字符串 (不自动加换行)
s1 := fmt.Sprint("A", "B", "C")
fmt.Printf("Sprint: [%s]\n", s1) // 输出 [ABC]
// 10. Sprintln: 格式化并返回字符串 (元素间加空格,末尾加换行)
s2 := fmt.Sprintln("A", "B", "C")
fmt.Printf("Sprintln: [%s]", s2) // 输出 [A B C\n]
// --- 以下演示 Scan 系列 (需要输入,示例中模拟或简单展示用法) ---
// 11. Sscan: 从字符串扫描数据
var v1, v2 int
inputStr := "10 20"
n, _ := fmt.Sscan(inputStr, &v1, &v2)
fmt.Printf("Sscan: Read %d values: %d, %d\n", n, v1, v2)
// 12. Sscanf: 从字符串格式化扫描数据
var name string
var age int
inputFormatted := "Name: Alice Age: 30"
fmt.Sscanf(inputFormatted, "Name: %s Age: %d", &name, &age)
fmt.Printf("Sscanf: Name=%s, Age=%d\n", name, age)
// 13. Sscanln: 从字符串扫描一行数据 (遇到换行停止)
lineInput := "100 200 300\nExtra data"
var a, b, c int
fmt.Sscanln(lineInput, &a, &b, &c)
fmt.Printf("Sscanln: %d, %d, %d\n", a, b, c)
// --- Fscan 系列通常需要真实的 io.Reader,这里用 strings.NewReader 模拟 ---
reader := strings.NewReader("1.1 2.2 3.3")
var x, y, z float64
// 14. Fscan
fmt.Fscan(reader, &x, &y, &z)
fmt.Printf("Fscan (from reader): %.1f, %.1f, %.1f\n", x, y, z)
// 重置 reader 用于下一个例子
reader = strings.NewReader("Val: 999")
var val int
// 15. Fscanf
fmt.Fscanf(reader, "Val: %d", &val)
fmt.Printf("Fscanf (from reader): %d\n", val)
// 重置 reader
reader = strings.NewReader("Line1 Data\nLine2 Data")
var word1, word2 string
// 16. Fscanln (只读到换行前)
fmt.Fscanln(reader, &word1, &word2)
fmt.Printf("Fscanln (from reader): %s, %s\n", word1, word2)
// --- Scan 系列 (交互式,运行时会阻塞等待用户输入,此处仅做代码展示结构) ---
/*
fmt.Print("Enter two numbers separated by space: ")
var n1, n2 int
// 17. Scan
fmt.Scan(&n1, &n2)
fmt.Printf("Scan received: %d, %d\n", n1, n2)
fmt.Print("Enter formatted input (e.g., ID:123): ")
var id int
// 18. Scanf
fmt.Scanf("ID:%d", &id)
fmt.Printf("Scanf received ID: %d\n", id)
fmt.Print("Enter a line of text: ")
var line string
// 19. Scanln
fmt.Scanln(&line)
fmt.Printf("Scanln received: %s\n", line)
*/
}