欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

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

2025年04月24日 Golang
前言以下是 go 语言fmt模块的完整方法详解及示例,涵盖所有核心功能:一、输出函数将数据写入标准输出、文件或字符串。1.print/println/printf功能print: 写入标准输出,不换行

前言

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

一、输出函数

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

1. print / println / printf

功能

  • print: 写入标准输出,不换行。
  • println: 写入标准输出并换行。
  • printf: 格式化写入标准输出。

示例

fmt.print("hello, ")        // 输出:hello, 
fmt.println("world!")       // 输出:world!(换行)
fmt.printf("%s %d\n", "year:", 2023) // 输出:year: 2023(换行)

2. fprint / fprintln / fprintf

功能

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

示例

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

功能

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

示例

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: 按格式字符串读取。

示例

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(如文件)读取数据。

示例

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

功能

从字符串解析数据。

示例

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十进制整数%d → 25
%f浮点数%f → 3.141593
%s字符串%s → “hello”
%t布尔值%t → true
%p指针地址%p → 0xc0000a
%t类型%t → int

四、其他功能

1. errorf

功能

生成格式化错误。

示例

err := fmt.errorf("无效的用户id: %d", -1)
// err.error() = "无效的用户id: -1"

2. formatter 和 stringer 接口

功能

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

示例

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}

五、注意事项

  • 错误处理scan 系列函数返回成功解析的项数和错误。
    n, err := fmt.scan(&a, &b)
    if err != nil {
        log.fatal("输入错误:", err)
    }
    
  • 性能:频繁字符串拼接时,优先使用 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 包的方法,可以高效处理输入输出、字符串格式化及错误生成。

到此这篇关于go语言fmt模块的文章就介绍到这了,更多相关go语言fmt模块详解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!