Skip to content

格式化方法

函数说明
Print输出字符串到控制台
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)
	*/
}

Released under the MIT License.