Robiłem prosty interfejs listy linków, aby poznać interfejsy Go, gdy natknąłem się na tę pozorną niespójność. nextT
jest zawsze zerowe, ale wartość zwracana next()
nie jest.Niespójne zero dla odbiornika pointeru (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?
}
Bez nil czeku (czego nie powinno się robić) w next()
uzyskać
true
false
Dzięki niemu uzyskać oczekiwany rezultat
true
true
Czyżbym odkrył czy jest to z jakiegoś powodu celowa niespodzianka? Uruchamianie w systemie Windows z wersją Go 1 przy użyciu instalacji zip (bez MSI)