私はこの明らかな矛盾を見つけたときに、Goインタフェースについて学ぶための簡単なリンクリストインターフェースを行っていました。 nextT
は常にゼロですが、戻り値はnext()
ではありません。 (私は実行する必要はありません)nilのチェックなしポインタ受信機に一貫性のないnil
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インストール(MSIなし)を使用してGoバージョン1でWindows上で実行