The only correct style is to tediously define methods for a containing record that explicitly call methods of inner record.
So that if you change one implementation of the inner function you gain the great opportunity to change the definition of the outer function resulting in a bug.
On the contrary, a delegate implementation
guards against possible bugs caused by a modification of inner method(somewhere far away in other unit).
Record composition. There are 2 ways.
1) Not promoting inner methods. Easy implementation, equally versatile.
2) Automatic promotion of inner record's methods to be callable by an outer record. (difficult, harmful)
Problems with the second way follow.
Two or more embedded records may have identical methods/properties.
You basically have to resolve
Multiple Inheritance in this case.
Do note that embedding can have many levels and ALL the methods are promoted to the most outer record(bubble up).
Now you compile a call to a method on advanced record:
SomeRecord.SomeMethod; // more than one SomeMethod are promoted
Golang uses algorithm "
The Rule of the Shallowest Depth".
Compiler creates a table with all the methods assigned a depth of embedding. Methods in the outer record are of depth 0. So it chooses SomeMethod with the lowest depth. As a programmer you are not sure which method wins unless you've remembered the hierarchy by exploring source code in different units.
If there are two SomeMethod with the same depth - compiler error "multiple inheritance conflict".
Outer record can embed two records from other libraries and one of those libraries in new version coincidentally introduces identical method with the same depth, and your program no longer compiles for some users. And it should be so rare that nobody is accustomed to fixing such cases, or chooses not to report a bug.
And so on.