我遇到了一段我不太理解的Go代码:
package main
import (
"io"
)
type MyCloser struct {
internalImplementation io.Closer
// other fields here
}
func (c *MyCloser) Close() error {
return c.internalImplementation.Close()
}
func closeUnlessNil(c io.Closer) {
if c != nil {
c.Close()
}
}
func main() {
var c *MyCloser // c == nil
defer closeUnlessNil(c)
}
在此尝试:https://play.golang.org/p/0CA4fTKpMs
在第18行调用c.Close()
时,代码会导致分段错误。
我有两个问题:
c
中closeUnlessNil(io.Closer)
的价值是多少?我原以为它nil
,但情况显然不是这样。closeUnlessNil(io.Closer)
的通用io.Closer
函数,并且仅当参数不是Close()
时调用nil
?