È esattamente come l'hai descritto tu: l'incorporamento di Go è una composizione con l'ulteriore vantaggio di "inoltrare" l'interfaccia.
Nella mia mente l'incorporamento è un tentativo di preservare il principale vantaggio dell'eredità tradizionale OOP - il riutilizzo del codice - evitando il suo più grande trabocchetto - un accoppiamento estremamente stretto. Quando si "eredita" un metodo tramite l'incorporamento, la classe "derivata" non è responsabile o addirittura in grado di reimplementarla, quindi non può "rompere la classe base" in qualche modo. E poiché non ci sono metodi "protetti" o "privati" a cui la tua classe "derivata" potrebbe avere accesso, non c'è violazione di incapsulamento. Ma hai ancora tutta la comodità di "ereditare" direttamente "l'interfaccia della classe base" piuttosto che scrivere un sacco di funzioni wrapper.