5人参与 • 2025-04-24 • Golang
以下是 go 语言 fmt
模块的完整方法详解及示例,涵盖所有核心功能:
将数据写入标准输出、文件或字符串。
print
: 写入标准输出,不换行。println
: 写入标准输出并换行。printf
: 格式化写入标准输出。fmt.print("hello, ") // 输出:hello, fmt.println("world!") // 输出:world!(换行) fmt.printf("%s %d\n", "year:", 2023) // 输出:year: 2023(换行)
将内容写入指定的 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
将内容格式化为字符串并返回。
s1 := fmt.sprint("hello", 123) // s1 = "hello123" s2 := fmt.sprintln("world!") // s2 = "world!\n" s3 := fmt.sprintf("value: %d", 100) // s3 = "value: 100"
从标准输入、文件或字符串读取数据。
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
从指定的 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
从字符串解析数据。
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 |
生成格式化错误。
err := fmt.errorf("无效的用户id: %d", -1) // err.error() = "无效的用户id: -1"
自定义类型的格式化行为。
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模块详解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论