【golang】一个包含nil指针的接口不是nil接口
今天拜读go圣经的时候,看到这么一个标题,这是interface的一个坑,作为自己的理解,我直接把它拿过来当作我的这篇博文的标题了
当接口作为类型时,可以帮助我们完成多态,对外隐藏实现等。一个接口的零值就是它的运行时类型和运行时的值都为nil。可是尽管这样也会有一些坑存在。
先看看go圣经
上的一个例子
const debug = true
func main() {
var buf *bytes.Buffer
if debug {
buf = new(bytes.Buffer) // enable collection of output
}
f(buf) // NOTE: subtly incorrect!
if debug {
// ...use buf...
}
}
// If out is