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