Ich machte eine einfache Linked List-Schnittstelle, um über Go-Schnittstellen zu lernen, als ich auf diese offensichtliche Inkonsistenz stolperte. nextT
ist immer Null, aber der Rückgabewert von next()
ist nicht.Inkonsistente Null für Zeiger Empfänger (Go Bug?)
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?
}
Ohne die Null-Prüfung (die ich nicht zu tun haben) in next()
bekomme ich
true
false
Damit ich das erwartete Ergebnis erhalten
true
true
habe ich einen entdeckt Fehler oder ist diese Überraschung aus irgendeinem Grund beabsichtigt? Läuft unter Windows mit Go-Version 1 mit der Zip-Installation (kein MSI)