Я делал простой интерфейс связанного списка, чтобы узнать об интерфейсах Go, когда наткнулся на это очевидное несоответствие. nextT
всегда равен нулю, а возвращаемое значение 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
Я обнаружил ошибку или этот сюрприз по какой-то причине преднамеренный? Запуск в Windows с Go версии 1 с использованием zip-установки (без MSI)