与具有interface {}参数的方法的接口不起作用

I'm trying to implement some interfaces in Go.

I have InterfaceA:

type InterfaceA interface{
    read(interface{}) string
}

I then have InterfaceB:

type InterfaceB interface{
    fetch()
}

I have a function:

func Read(a InterfaceA) {}

I have StructA, which satisfies InterfaceA via it's methods, but instead of having a variable "interface{}", it is passed InterfaceB as such:

type StructA struct {}

func (a *StructA) read(b InterfaceB) string {
    resp := b.fetch()
    return resp
}

This seems to work for my unit tests, but when I import the package I get an error stating that InterfaceA is not implemented correctly, because it is expecting "read(interface{})" not "read(InterfaceB)". Error:

StructA does not implement InterfaceA (wrong type for read method)
have read(InterfaceB) string
want read(interface {}) string

The reason I'm trying to pass an interface to the read() function is so that I can mock out the "i.fetch()" method, but still test the rest of the read() function.

I also can't pass the read method of StructA an interface parameter (e.g. read(b interface{}), because then b won't have the fetch() method.

Am I doing this wrong? I thought that this was working as my unit tests work. I've only encountered the issue when importing the package.

thanks for the comments. I've managed to get this to work via type type assertions. More details can be found here: golang.org/ref/spec#Type_assertions