在https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md中的例子安排了多次调用w.Close()。https://golang.org/pkg/io/#Closer 表示
- 在第一次调用后,Close的行为是未定义的。具体的实现可能会记录自己的行为*。
代码前的文本和问题:
On the other hand, the equivalent actual Go code today would be
Defers w.Close() and then calls w.Close().
For example, the corrected code above shortens to
checks w.Close() but also does that in an above handler.
双重关闭可能是“之前”的错误之一,但如果改进后的“之后”版本不这样做就更好了。具有更可靠错误和更多帮助性的更强大的版本将是一个介于两者之间的版本,不会这样做。
CC: @rsc
2条答案
按热度按时间slwdgvem1#
请参阅 #25408 (
OnceCloser
)。zpgglvta2#
CC: @mpvl