--- id: 8f08356d-b0dc-465b-b7f5-5522b5133916 title: Golang Embedding --- # Description [Embedding](https://golang.org/doc/effective_go.html#embedding) is Gos answer to subclasses. There's one caveat: > There's an important way in which embedding differs from subclassing. > When we embed a type, the methods of that type become methods of the > outer type, but when they are invoked the receiver of the method is > the inner type, not the outer one. # Interfaces ``` go type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Write(p []byte) (n int, err error) } type ReadWriter interface { Reader Writer } ``` `ReadWriter` "extends" `Reader` & `Writer` in the example above. # Structs ``` go type ReadWriter struct { *Reader // *bufio.Reader *Writer // *bufio.Writer } func (rw *ReadWriter) Read(p []byte) (n int, err error) { return rw.reader.Read(p) } ```