是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()
函数返回

所以,我可以自由地说,您不应该多次调用它,因为在我描述的这种情况下,它将返回一个错误。但它也可能不会在其他方面出错。正如文档所说,这是未定义的行为