In selector resolution, struct field matching now precedes method matching. Before struct field matching could be skipped in case of a matching method, which is incorrect, as demontrated by _test/issue-1156.go. Field lookup has been fixed to operate on recursive structures. Concrete type values are derived when filling a receiver for interface methods. LookupBinField has been fixed to skip non struct values. LookupMethod has been fixed to iterate on interface values as well as concrete type values. Fixes #1156.
26 lines
316 B
Go
26 lines
316 B
Go
package main
|
|
|
|
type myInterface interface {
|
|
myFunc() string
|
|
}
|
|
|
|
type V struct{}
|
|
|
|
func (v *V) myFunc() string { return "hello" }
|
|
|
|
type U struct {
|
|
v myInterface
|
|
}
|
|
|
|
func (u *U) myFunc() string { return u.v.myFunc() }
|
|
|
|
func main() {
|
|
x := V{}
|
|
y := myInterface(&x)
|
|
y = &U{y}
|
|
println(y.myFunc())
|
|
}
|
|
|
|
// Output:
|
|
// hello
|