Oh but you can avoid that, it's part of the language, see this link:
https://golang.org/doc/effective_go.html#embedding
Typically, you can have something like this:
type lockedReader struct {
io.Reader
sync.Mutex
}
lr := lockerReader{someReader, sync.Mutex{}}
lr.Lock()
lr.Read(...)
lr.Unlock()
By default, methods will be delegated to the first field that has the method. If you want something else, you are free to override this default behavior.