⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go io包:流式数据读写

深入理解io.Reader和io.Writer接口,掌握流式处理数据的方法。 · 难度:入门 · +15XP

io包核心接口

Go的io包定义了数据流读写的基本抽象:io.Readerio.Writer。Reader的Read方法将数据读入字节切片,返回读取字节数和错误;Writer的Write方法将数据从字节切片写出。

接口方法常见实现
io.ReaderRead(p []byte) (n int, err error)os.File, strings.Reader, bytes.Buffer
io.WriterWrite(p []byte) (n int, err error)os.File, bytes.Buffer, net.Conn
io.CopyCopy(dst Writer, src Reader) (int64, error)将数据从src复制到dst

组合接口

io包还提供了组合接口如io.ReadWriterio.ReadCloser等,方便声明同时具备多种能力的对象。

代码示例:使用io.Copy复制数据

package main

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

func main() { src := strings.NewReader("Hello, Go io!") var dst bytes.Buffer written, err := io.Copy(&dst, src) if err != nil { panic(err) } fmt.Printf("Copied %d bytes: %s ", written, dst.String()) // 使用io.ReadAll一次性读取 src.Seek(0, 0) // 重置读取位置 data, _ := io.ReadAll(src) fmt.Println("Read all:", string(data)) }

练习提示

实现一个UpperCaseReader,包装另一个Reader并将所有小写字母转换为大写后输出。提示:在Read方法中修改字节切片内容。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0