Tôi đang đọc spec về selectors: https://golang.org/ref/spec#SelectorsGolang: Tại sao bộ chọn cho con trỏ là bất hợp pháp sau khi so sánh?
Tại sao q.M0()
không hợp lệ. Trong khi p.M0()
hợp lệ và q=p
. Rất lạ đối với tôi.
Mã nguồn liên quan:
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
Tôi biết rằng tài liệu giải thích nó. Nhưng xin đừng downvote. Nếu tôi hỏi, điều đó có nghĩa là tôi đã cố gắng hiểu và không thành công. Tôi biết 2 điều: * 1. * Mọi người ở đây thích downvote 'golang' câu hỏi. * 2. * Người dân ở đây có khả năng mạnh mẽ hơn để giải thích những điều phức tạp trong ngôn ngữ Markdown. – Aminadav