是go';s net.Close()幂等元?
是go';s net.Close()幂等元?,go,Go,io.Closer界面显示: 第一次调用后关闭的行为未定义。具体的 实现可以记录自己的行为 一个net.Conn的Close()函数怎么样?我可以安全地多次呼叫它吗 具体地说,我想知道如果我提前返回错误,我是否可以推迟c.Close(),但仍然显式调用c.Close(),而不是让客户端等待我完成后台处理。嗯,net.Conn是一个接口,因此它取决于具体的实现 我在TCPConn、UDPConn和IPConn结构中检查了实现。它们似乎包含net.Conn接口 此实现将Close()调用传播到其底层
io.Closer
界面显示:
第一次调用后关闭的行为未定义。具体的
实现可以记录自己的行为
一个net.Conn
的Close()函数怎么样?我可以安全地多次呼叫它吗
具体地说,我想知道如果我提前返回错误,我是否可以推迟c.Close()
,但仍然显式调用c.Close()
,而不是让客户端等待我完成后台处理。嗯,net.Conn
是一个接口,因此它取决于具体的实现
我在TCPConn
、UDPConn
和IPConn
结构中检查了实现。它们似乎包含net.Conn
接口
此实现将Close()
调用传播到其底层文件描述符,这意味着在Unix系统上调用
因为下一个调用是对文件描述符使用的互斥体的调用,所以我们必须更低
如果之前关闭了连接并释放了互斥锁,则它似乎返回false,并且文件描述符Close()
函数返回
所以,我可以自由地说,您不应该多次调用它,因为在我描述的这种情况下,它将返回一个错误。但它也可能不会在其他方面出错。正如文档所说,这是未定义的行为