"Ez elég dogmatikusan hangzik [...] Hint: beágyazás != tartalmazás."
Pontatlanul fogalmaztam. Rendes alatt én a megszokott, hagyományos, oktatott OO-t értettem. Azt ahol az inheritance és a composition elkülönülő technika a Go-ban lévő hibrid embedding-gel szemben. A Go embedding lehetőséget ad többszörös öröklődésre (ha nem tenné nem sok értelme lenne a sima egyszeres öröklődéssel szemben), de az ebből adódó konfliktusok feloldása szerintem rossz. "Ha ugyanazon a szinten névütközés van, de senki nem használja, akkor nem hiba, egyébként hiba." De mi van ha az adott fordítási egységen kívül van a meghívás? Akkor ez lefordul, de a meghívó/használó már nem?
"Lesz fordítási hiba, csak máshol. Nem ott, ahol az osztályt implementálod, hanem ott, ahol megpróbálod az osztály egy példányát (implicit módon) castolni az interface típusára."
A probléma hasonló, mint az előbb: mi van, ha a castolás nem az én programomban (amiben az implementáció van) történik? Az implementáció használójánál lesz hiba, nem az írójánál. Ez szerintem nem oké. Java-ban a hiba ott keletkezik, ahol igazából van: az implementáció írója explicit kifejtette szándékát, hogy az adott osztály az interfacet megvalósítja. A fordító az implementáció fordításakor figyelmeztet, hogy ez már nem igaz.