czytam o spec selektorów: https://golang.org/ref/spec#SelectorsGolang: Dlaczego selektor do wskaźników jest niedozwolony po porównaniu?
Dlaczego q.M0()
jest nieprawidłowy. Chociaż p.M0()
jest ważny i q=p
. Bardzo dziwne dla mnie.
Odpowiedni kod źródłowy:
type T0 struct {
x int
}
func (*T0) M0()
type T1 struct {
y int
}
func (T1) M1()
type T2 struct {
z int
T1
*T0
}
func (*T2) M2()
type Q *T2
var t T2 // with t.T0 != nil
var p *T2 // with p != nil and (*p).T0 != nil
var q Q = p
p.M0() // ((*p).T0).M0() M0 expects *T0 receiver
q.M0() // (*q).M0 is valid but not a field selector
Wiem, że dokumentacja to wyjaśnia. Ale proszę, nie odrzucajcie. Jeśli pytam, to znaczy, że próbowałem zrozumieć i nie odniosłem sukcesu. Wiem 2 rzeczy: * 1. * Ludzie tutaj lubią powtarzać pytania "golang". * 2. * Ludzie tutaj mają silniejszą zdolność do wyjaśniania skomplikowanych rzeczy w języku Markdown. – Aminadav