What is the misfeature, though? You gave us a clear explanation of
what you did and what happened; thanks very much for doing that. But
you didn't say what you expected to happen instead.
I'll speculate that perhaps you would prefer a compilation error due
to an ambiguous field. Not doing that was an explicit decision.
Consider a struct in package P1 that embeds two structs, one from
package P2 and one from P3. Suppose the struct in P3 embeds another
struct from P4. Suppose that all four packages are in different
github repos maintained by different people; recall that one of the
explicit goals of the Go language is to support programming at scale.
With this organization, package P1 can refer directly to fields
defined in P2 and P3. We want it to be possible for P4 to add a
field, a field that might happen to duplicate a field in P2--in this
example, P2 and P4 might not even know about each other at all--and we
want that to happen without breaking P1. Hope that makes sense.
Ian