0Pricing
Go Academy · 课时

io 工具函数

Copy、TeeReader、MultiWriter

io 工具函数 是 CoddyKit 上的免费 Go Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。

io 工具箱

io 包提供了小巧而强大的辅助工具,用于组合读取器和写入器:Copy、TeeReader、MultiWriter 等。

io.Copy

io.Copy(dst, src) 会将读取器中的所有字节流式写入写入器,并返回字节数。

package main

import (
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	n, _ := io.Copy(os.Stdout, strings.NewReader("copied\n"))
	fmt.Println("bytes:", n)
}

io.CopyN

io.CopyN(dst, src, n) 会恰好复制 n 个字节——适合读取长度已知的前缀。

package main

import (
	"io"
	"os"
	"strings"
)

func main() {
	io.CopyN(os.Stdout, strings.NewReader("abcdef"), 3)
	os.Stdout.WriteString("\n")
}

io.MultiWriter

io.MultiWriter 会将一次写入同时分发给多个写入器——就像 Unix 的 tee 命令。

package main

import (
	"bytes"
	"fmt"
	"io"
	"os"
)

func main() {
	var buf bytes.Buffer
	w := io.MultiWriter(os.Stdout, &buf)
	io.WriteString(w, "to both\n")
	fmt.Println("buffer copy:", buf.String())
}

io.TeeReader

io.TeeReader(r, w) 会返回一个读取器,将读取到的所有内容复制到 w 中——非常适合在数据流动时记录日志或计算哈希。

package main

import (
	"bytes"
	"fmt"
	"io"
	"strings"
)

func main() {
	var spy bytes.Buffer
	tee := io.TeeReader(strings.NewReader("stream"), &spy)
	io.ReadAll(tee)
	fmt.Println("observed:", spy.String())
}

io.MultiReader

io.MultiReader 会将多个读取器连接成一个连续的数据流。

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := io.MultiReader(strings.NewReader("Hello, "), strings.NewReader("World"))
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

io.Discard

io.Discard 是一个会丢弃所有内容的写入器——适合排空您不需要的读取器。

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	n, _ := io.Copy(io.Discard, strings.NewReader("ignored"))
	fmt.Println("discarded:", n, "bytes")
}

使用 TeeReader 计算哈希

这是一种经典组合:为实现实际用途读取数据流,同时让 TeeReader 将相同的字节送入哈希函数,从而一次遍历就能计算校验和。

io.Pipe

io.Pipe 在内存中连接写入器和读取器,通常跨 Go 协程使用,以实现流式生产者/消费者模式。

选择合适的辅助工具

  • 移动数据:Copy / CopyN
  • 复制输出:MultiWriter
  • 观察输入:TeeReader
  • 连接输入:MultiReader
  • 排空输入:Discard

可组合性

这些辅助工具都使用 io.Reader/io.Writer,因此可以自由嵌套和串联,用微小组件构建复杂的流水线。

快速检查

请测试您对 io 工具的了解。

回顾

您学习了 io 工具辅助函数。

  • Copy / CopyN 传输数据流
  • MultiWriter 复制输出
  • TeeReader 观察输入
  • MultiReader 连接输入,Discard 排空输入
  • 所有工具都可以通过读取器/写入器接口进行组合

常见问题解答

「io 工具函数」课时是免费的吗?

是的 — 「io 工具函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。

「io 工具函数」这节课中我会学到什么?

Copy、TeeReader、MultiWriter 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Go Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「io 工具函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Go Academy 课中编写并运行代码吗?

能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Reader 接口
  2. Writer 接口
  3. io 工具函数
  4. 实现自定义读取器
← 返回 Go Academy