Golang在net包下的Pipe方法怎么用?

官方文档就说了

func Pipe() (Conn, Conn)
Pipe创建一个内存中的同步、全双工网络连接。连接的两端都实现了Conn接口。一端的读取对应另一端的写入,直接将数据在两端之间作拷贝;没有内部缓冲。

具体这个是怎么用啊?起什么作用?

阅读 9.8k
2 个回答

可以参考io下的Pipe(), io下的Pipe()是单向的,一端的读取匹配另一端的写入,直接在这两端之间复制数据。而net下的Pipe()是双向的,也就是说返回的Conn既可以读也可以写,通常用于不同区域的代码之间相互传递数据。

func Pipe() (Conn, Conn) {
    r1, w1 := io.Pipe()
    r2, w2 := io.Pipe()

    return &pipe{r1, w2}, &pipe{r2, w1}
}

type pipe struct {
    *io.PipeReader
    *io.PipeWriter
}

net.Pipe()是socket单元测试非常好的方案,不会占用本机端口,直接模拟socket两端操作,不需要Dial/Listen/Accept。

stackoverflow中的相关网页如下:
https://stackoverflow.com/que...

代码片断如下:

    client, server := net.Pipe()
    defer client.Close()
    defer server.Close()

    // server receive and response
    go func() {
        ............
    }()

    // client => server
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题