0Pricing
Go Academy · 课时

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Printf 动词
  2. Sprintf 与 Fprintf
  3. Stringer 接口
  4. 扫描输入
← 返回 Go Academy