Go 语言 fmt 模块的完整方法详解及示例

以下是 Go 语言 fmt 模块的完整方法详解及示例,涵盖所有核心功能:


一、输出函数

将数据写入标准输出、文件或字符串。


1. Print / Println / Printf

功能
  • Print: 写入标准输出,不换行。
  • Println: 写入标准输出并换行。
  • Printf: 格式化写入标准输出。
示例
go 复制代码
fmt.Print("Hello, ")        // 输出:Hello, 
fmt.Println("World!")       // 输出:World!(换行)
fmt.Printf("%s %d\n", "Year:", 2023) // 输出:Year: 2023(换行)

2. Fprint / Fprintln / Fprintf

功能

将内容写入指定的 io.Writer(如文件、网络连接)。

示例
go 复制代码
file, _ := os.Create("output.txt")
fmt.Fprint(file, "Hello ")     // 写入文件内容:Hello 
fmt.Fprintln(file, "World!")   // 写入文件内容:World!(换行)
fmt.Fprintf(file, "Value: %d", 100) // 写入文件内容:Value: 100

3. Sprint / Sprintln / Sprintf

功能

将内容格式化为字符串并返回。

示例
go 复制代码
s1 := fmt.Sprint("Hello", 123)       // s1 = "Hello123"
s2 := fmt.Sprintln("World!")         // s2 = "World!\n"
s3 := fmt.Sprintf("Value: %d", 100)  // s3 = "Value: 100"

二、输入函数

从标准输入、文件或字符串读取数据。


1. Scan / Scanln / Scanf

功能
  • Scan: 从标准输入读取,以空格分隔。
  • Scanln: 读取到换行符停止。
  • Scanf: 按格式字符串读取。
示例
go 复制代码
var a int
var b string

// 输入:10 ABC
fmt.Scan(&a, &b)      // a=10, b="ABC"

// 输入:20 XYZ\n
fmt.Scanln(&a, &b)    // a=20, b="XYZ"

// 输入:Number: 30
fmt.Scanf("Number: %d", &a) // a=30

2. Fscan / Fscanln / Fscanf

功能

从指定的 io.Reader(如文件)读取数据。

示例
go 复制代码
file, _ := os.Open("data.txt")
var x int
var y string

// 文件内容:100 Golang
fmt.Fscan(file, &x, &y)    // x=100, y="Golang"

// 文件内容:200 Rust\n
fmt.Fscanln(file, &x, &y)  // x=200, y="Rust"

// 文件内容:Value: 300
fmt.Fscanf(file, "Value: %d", &x) // x=300

3. Sscan / Sscanln / Sscanf

功能

从字符串解析数据。

示例
go 复制代码
str := "404 Not Found"
var code int
var msg string

fmt.Sscan(str, &code, &msg)     // code=404, msg="Not"
fmt.Sscanln("500 Error\n", &code, &msg) // code=500, msg="Error"
fmt.Sscanf("Status: 200 OK", "Status: %d %s", &code, &msg) // code=200, msg="OK"

三、格式化动词

常用格式化占位符(部分):

动词 说明 示例
%v 默认格式 %v{Alice 30}
%d 十进制整数 %d25
%f 浮点数 %f3.141593
%s 字符串 %s → "hello"
%t 布尔值 %ttrue
%p 指针地址 %p0xc0000a
%T 类型 %Tint

四、其他功能

1. Errorf

功能

生成格式化错误。

示例
go 复制代码
err := fmt.Errorf("无效的用户ID: %d", -1)
// err.Error() = "无效的用户ID: -1"

2. FormatterStringer 接口

功能

自定义类型的格式化行为。

示例
go 复制代码
type User struct {
    Name string
    Age  int
}

// 实现 Stringer 接口
func (u User) String() string {
    return fmt.Sprintf("%s (%d岁)", u.Name, u.Age)
}

// 实现 Formatter 接口
func (u User) Format(f fmt.State, verb rune) {
    if verb == 'v' {
        fmt.Fprintf(f, "User{Name:%s, Age:%d}", u.Name, u.Age)
    }
}

u := User{"Bob", 30}
fmt.Println(u)        // 输出:Bob (30岁)
fmt.Printf("%v", u)   // 输出:User{Name:Bob, Age:30}

五、注意事项

  1. 错误处理Scan 系列函数返回成功解析的项数和错误。

    go 复制代码
    n, err := fmt.Scan(&a, &b)
    if err != nil {
        log.Fatal("输入错误:", err)
    }
  2. 性能 :频繁字符串拼接时,优先使用 strings.Builder 而非 Sprintf


六、完整函数列表

函数签名 功能说明
Print(a ...any) (n int, err error) 标准输出
Println(a ...any) (n int, err error) 标准输出并换行
Printf(format string, a ...any) (n int, err error) 格式化输出
Fprint(w io.Writer, a ...any) (n int, err error) 写入 io.Writer
Sprint(a ...any) string 返回格式化字符串
Errorf(format string, a ...any) error 生成格式化错误

通过掌握 fmt 包的方法,可以高效处理输入输出、字符串格式化及错误生成。

相关推荐
良木生香17 小时前
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载
开发语言·c++
忘梓.17 小时前
墨色规则与血色节点:C++红黑树设计与实现探秘
java·开发语言·c++
hhh3u3u3u17 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
凤年徐17 小时前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法
IT_陈寒17 小时前
Python的列表推导式里藏了个坑,差点让我加班到凌晨
前端·人工智能·后端
星河耀银海17 小时前
C++ 模板进阶:特化、萃取与可变参数模板
java·开发语言·c++
cccccc语言我来了18 小时前
【C++---unordered_set/map底层封装】个不拘一格的集合。它不似有序集合那般循规蹈矩,而是以一种洒脱不羁的方式,将元素们随意地散落其中。每一个元素都是独一无二的。
开发语言·c++·哈希算法
Zfox_18 小时前
C++ IO流全解析:标准库中的数据处理与文件读写艺术
开发语言·c++
加号318 小时前
【C#】实现沃德普线光控制器通信控制(附完整源码)
开发语言·c#
Wenweno0o18 小时前
Eino - 错误处理与稳定性
golang·智能体·eino