この明らかな矛盾に遭遇したとき、私はGoインターフェースについて学ぶために単純なリンクリストインターフェースを実行していました。nextT
は常にnilですが、の戻り値はそうで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?
}
nilチェック(私はする必要はありません)がないnext()
と、
true
false
それで私は期待される結果を得る
true
true
バグを発見したことがありますか、それとも何らかの理由でこの驚きは意図的なものですか?zipインストール(MSIなし)を使用したGoバージョン1のWindowsでの実行