What you described is not inheritance. If you pass your "inherited" type to a function that expect the "parent" type it will not compile. There is no inheritance in Go, and you cannot roll you own.
> What Go doesn't make possible is tying inheritance to subtyping
There is no subtying whatsoever in Go to begin with. There is no point in "inheritance" if it is not polymorphic. What you just did is create a new type. that is not inheritance in a statically typed language.
That is called “subtyping”, not “inheritance”. Java and C++ happen to conflate the two concepts, but it's perfectly possible to keep them separate.
> There is no subtying whatsoever in Go to begin with.
A struct is a subtype of every interface its methods are compatible with.
I never said that struct embedding creates a subtype. I said that it can be used to emulate inheritance (subclassing). Inheritance and subtyping are very different things, and the fact languages like Java and C++ conflate them actually creates several problems. See:
[0] http://www.cs.utexas.edu/~wcook/papers/InheritanceSubtyping9...
(0) Embed base structs.
(1) Implement non-overridden methods as redirected calls to base struct methods.
(2) Implement overridden method calls however you wish.
What Go doesn't make possible is tying inheritance to subtyping, like Java and C++ do. And this is a very good thing.