Несовместимый nil для получателя указателя (Ошибка?)

Я делал простой интерфейс связанного списка, чтобы узнать об интерфейсах 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)

5
задан Dave Cheney 13 June 2012 в 23:57
поделиться