Stavo facendo una semplice interfaccia elenco collegato per conoscere le interfacce Go quando sono incappato in questa apparente incoerenza. nextT
è sempre nullo ma il valore restituito di next()
non lo è.Incoerente nil per ricevitore puntatore (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?
}
Senza il controllo nullo (che non avrei dovuto fare) in next()
ottengo
true
false
Con esso ottengo il risultato atteso
true
true
Avere ho scoperto un bug o è questa sorpresa intenzionale per qualche motivo? Esecuzione su Windows con Go versione 1 utilizzando l'installazione zip (senza MSI)