如何处理嵌入式接口并在它们之间共享数据

I would like to better understand how to use interfaces, mainly to split code in reusable components and at the same time make it more easy for testing, currently my main question is how to share/get data between the interfaces that belong to a main interface, for example:

https://play.golang.org/p/67CQor1_pY

package main

import (
    "fmt"
)

type MainInterface interface {
    SubInterfaceA
    SubInterfaceB
}

type SubInterfaceA interface {
    MethodA()
    GetterA(s implementMain)
}

type SubInterfaceB interface {
    MethodB()
    GetterB(s implementMain)
}

type implementA struct{}

func (ia *implementA) MethodA() { fmt.Println("I am method A") }
func (ia *implementA) GetterA(s implementMain) {
    fmt.Println(s.Data)
}

type implementB struct{}

func (ib *implementB) MethodB() { fmt.Println("I am method B") }
func (ib *implementB) GetterB(s implementMain) {
    fmt.Println(s.Data)
}

type implementMain struct {
    Data string
    SubInterfaceA
    SubInterfaceB
}

func New(d string) implementMain {
    return implementMain{
        Data:          d,
        SubInterfaceA: &implementA{},
        SubInterfaceB: &implementB{},
    }
}

func main() {
    var m MainInterface

    m = New("something")

    fmt.Println(m.(implementMain).Data)

    m.MethodA()                  // prints I am method A
    m.MethodB()                  // prints I am method B
    m.GetterA(m.(implementMain)) // prints "something"
    m.GetterB(m.(implementMain)) // prints "something"
}

In the above code, within the methods of struct implementA or implementB how to access the struct elements of the parent holder implementMain that implements MainInterface without passing it as an argument?

with holder struct I mean:

type implementMain struct {
    Data string
    SubInterfaceA
    SubInterfaceB
}

If I am right SubInterfaceA and SubInterfaceB are embedded and help to make the struct implementMain satisfy the MainInterface:

type MainInterface interface {                                                                                                                                                                                                                                              
   SubInterfaceA                                                                                                                                                                                                                                                           
   SubInterfaceB                                                                                                                                                                                                                                                           
} 

But within the embedded methods of the SubInterfaceA or subInterfaceB what is the best practice to use in order to be available to get the data string?

I created Getter(s implementMain) method and passed the holder struct, but had to cast type:

m.GetterA(m.(implementMain)) 

I don't know if by satisfying a interface, all the involved interfaces can become part of the same structure scope and if they do, how to get/share data between them or either between its components?, for example besides been available to reach data string how from SubInterfaceA get/access SubInterfaceB