Sprintf 与 Fprintf
将内容格式化为字符串和写入器
Sprintf 与 Fprintf 是 CoddyKit 上的免费 Go Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
Printf 系列
fmt 包有三个用于格式化的相关函数:
Printf写入标准输出。Sprintf返回格式化后的字符串。Fprintf写入任意写入器。
package main
import "fmt"
func main() {
fmt.Printf("hello %s\n", "world")
}Sprintf 返回字符串
fmt.Sprintf 的格式化方式与 Printf 完全相同,但它不会打印,而是将结果作为字符串返回,供您存储或重复使用。
package main
import "fmt"
func main() {
msg := fmt.Sprintf("%s scored %d", "Bob", 95)
fmt.Println(msg)
}构建标识符
Sprintf 便于根据多个部分组装键、文件名或标签。
package main
import "fmt"
func main() {
id := fmt.Sprintf("user-%04d", 42)
fmt.Println(id)
}将数字格式化为文本
使用 Sprintf 可以将数字转换为格式美观的字符串,例如货币金额。
package main
import "fmt"
func main() {
label := fmt.Sprintf("Price: $%.2f", 7.5)
fmt.Println(label)
}Fprintf 写入写入器
fmt.Fprintf 接受 io.Writer 作为第一个参数,并将格式化后的内容写入其中。os.Stdout 就是这样的写入器。
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintf(os.Stdout, "to stdout: %d\n", 1)
}写入标准错误
使用 Fprintf 将诊断信息发送到 os.Stderr,这样它们就能与正常输出分开。
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintf(os.Stderr, "warning: %s\n", "low disk")
}将 Fprintf 写入构建器
由于 strings.Builder 也是一个 io.Writer,您可以直接将格式化内容写入其中,并在最后读取字符串。
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "%s=%d;", "x", 10)
fmt.Fprintf(&b, "%s=%d", "y", 20)
fmt.Println(b.String())
}将 Fprintf 写入 bytes.Buffer
bytes.Buffer 是另一个常用的写入目标。先逐步构建内容,然后将其转换为字符串。
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
fmt.Fprintf(&buf, "row %d\n", 1)
fmt.Fprintf(&buf, "row %d\n", 2)
fmt.Print(buf.String())
}不带 f 的 Sprint 和 Fprint
带 f 的版本接受格式字符串。去掉 f 后使用 Sprint/Fprint,它们只会使用默认格式连接各个参数。
package main
import "fmt"
func main() {
s := fmt.Sprint("a", 1, true)
fmt.Println(s)
}Sprintln 会添加空格
fmt.Sprintln 会用空格连接参数并追加换行符,然后返回字符串。
package main
import "fmt"
func main() {
s := fmt.Sprintln("x", 1, "y", 2)
fmt.Print(s)
}选择合适的工具
请根据目标位置进行选择:
- 需要字符串?使用
Sprintf。 - 写入标准输出?使用
Printf。 - 写入文件、缓冲区或错误流?使用
Fprintf。
package main
import (
"fmt"
"os"
)
func main() {
s := fmt.Sprintf("count=%d", 3)
fmt.Fprintf(os.Stdout, "%s\n", s)
}快速检查
哪个函数会返回格式化后的文本,而不是打印它?
回顾:Sprintf 和 Fprintf
您已经了解了格式化函数系列:
Sprintf返回字符串。Fprintf可以写入任意io.Writer(标准输出、标准错误、缓冲区和构建器)。- 不带
f的变体使用默认格式。
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "result=%s", fmt.Sprintf("%d%%", 80))
fmt.Println(b.String())
}常见问题解答
「Sprintf 与 Fprintf」课时是免费的吗?
是的 — 「Sprintf 与 Fprintf」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「Sprintf 与 Fprintf」这节课中我会学到什么?
将内容格式化为字符串和写入器 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Sprintf 与 Fprintf」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Printf 动词
- Sprintf 与 Fprintf
- Stringer 接口
- 扫描输入