91人参与 • 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 举报,一经查实将立刻删除。
发表评论