io.ReadWriteCloser接口
1.概念
conn 是由構(gòu)建函數(shù)傳入,通常是通過(guò) TCP 或者 Unix 建立 socket 時(shí)得到的鏈接實(shí)例.
在Go語(yǔ)言中,io.ReadWriteCloser是一個(gè)組合接口,它聚合了io.Reader、io.Writer和io.Closer的功能。這意味著一個(gè)實(shí)現(xiàn)了io.ReadWriteCloser接口的對(duì)象可以進(jìn)行讀取、寫(xiě)入操作,并且可以關(guān)閉資源。
2.使用場(chǎng)景
io.ReadWriteCloser接口通常用于需要同時(shí)進(jìn)行讀寫(xiě)操作的場(chǎng)景,例如網(wǎng)絡(luò)連接(如 TCP socket)或文件操作
網(wǎng)絡(luò)通信:在 TCP 通信中,一個(gè)連接(net.Conn)就是一個(gè)io.ReadWriteCloser,你可以通過(guò)它讀取數(shù)據(jù)、發(fā)送數(shù)據(jù),并在使用完畢后關(guān)閉連接。文件操作:在處理文件時(shí),*os.File也實(shí)現(xiàn)了io.ReadWriteCloser接口,允許你讀取文件內(nèi)容、寫(xiě)入數(shù)據(jù),并關(guān)閉文件
3.功能詳解
io.ReadWriteCloser接口定義如下:
io.ReadWriteCloser必須實(shí)現(xiàn)以下方法:
-
Read(p []byte) (n int, err error):從數(shù)據(jù)源讀取數(shù)據(jù)到字節(jié)數(shù)組p中。
-
Write(p []byte) (n int, err error):將字節(jié)數(shù)組p中的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)接收器中。
-
Close() error:關(guān)閉資源,釋放相關(guān)系統(tǒng)資源。
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() // 寫(xiě)入數(shù)據(jù)到服務(wù)器
_, err = conn.Write([]byte("Hello, Server!"))
if err != nil {
fmt.Println("寫(xiě)入失敗:", err) return } // 從服務(wù)器讀取數(shù)據(jù)
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("讀取失敗:", err)
return
}
fmt.Println("從服務(wù)器收到:", string(buffer[:n]))
}
-
使用net.Dial建立了一個(gè) TCP 連接到本地的8080端口。
-
使用conn.Write向服務(wù)器發(fā)送數(shù)據(jù)。
-
使用conn.Read從服務(wù)器讀取數(shù)據(jù)。
-
使用defer conn.Close確保在函數(shù)返回前關(guān)閉連接