当我偶然发现这种明显的不一致时,我正在做一个简单的链表接口来了解 Go 接口。nextT
总是 nil 但返回值next()
不是。
package main
import (
"fmt"
)
type LinkedList interface {
next() LinkedList
}
type T struct {
nextT *T
}
func (t *T) next() LinkedList {
//uncomment to see the difference
/*if t.nextT == nil {
return nil
}*/
return t.nextT//this is nil!
}
func main() {
t := new(T)
fmt.Println(t.nextT == nil)
var ll LinkedList
ll = t
fmt.Println(ll.next() == nil)//why isn't this nil?
}
没有零检查(我不应该这样做),next()
我得到
true
false
有了它,我得到了预期的结果
true
true
我是否发现了一个错误,或者出于某种原因,这个惊喜是故意的?使用 zip 安装在带有 Go 版本 1 的 Windows 上运行(无 MSI)