io.ReadWriteCloser接口
扫描二维码
随时随地手机看文章
1.概念
conn 是由构建函数传入,通常是通过 TCP 或者 Unix 建立 socket 时得到的链接实例.
在Go语言中,io.ReadWriteCloser是一个组合接口,它聚合了io.Reader、io.Writer和io.Closer的功能。这意味着一个实现了io.ReadWriteCloser接口的对象可以进行读取、写入操作,并且可以关闭资源。
2.使用场景
io.ReadWriteCloser接口通常用于需要同时进行读写操作的场景,例如网络连接(如 TCP socket)或文件操作
网络通信:在 TCP 通信中,一个连接(net.Conn)就是一个io.ReadWriteCloser,你可以通过它读取数据、发送数据,并在使用完毕后关闭连接。文件操作:在处理文件时,*os.File也实现了io.ReadWriteCloser接口,允许你读取文件内容、写入数据,并关闭文件
3.功能详解
io.ReadWriteCloser接口定义如下:
io.ReadWriteCloser必须实现以下方法:
-
Read(p []byte) (n int, err error):从数据源读取数据到字节数组p中。
-
Write(p []byte) (n int, err error):将字节数组p中的数据写入到数据接收器中。
-
Close() error:关闭资源,释放相关系统资源。
package main
import ( "fmt" "io" "net" )
func main() {
// 建立 TCP 连接
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("连接失败:", err)
return
}
defer conn.Close() // 写入数据到服务器
_, err = conn.Write([]byte("Hello, Server!"))
if err != nil {
fmt.Println("写入失败:", err) return } // 从服务器读取数据
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("读取失败:", err)
return
}
fmt.Println("从服务器收到:", string(buffer[:n]))
}
-
使用net.Dial建立了一个 TCP 连接到本地的8080端口。
-
使用conn.Write向服务器发送数据。
-
使用conn.Read从服务器读取数据。
-
使用defer conn.Close确保在函数返回前关闭连接