// BEGIN: external library
type realX struct {}
type realY struct {}
func (realX) Do() realY {
  return realY{}
}
// END
type A struct {
  a myX
}
type myY interface {}
type myX interface {
  Do() myY
}
func foo (arg1 myY) {
}
func main() {
    foo(realY{})
    x := A{realX{}}
    fmt.Println("Hello, playground")
}
我明白了:
cannot use realX literal (type realX) as type myX in field value:
    realX does not implement myX (wrong type for Do method)
        have Do() realY
        want Do() myY
从它的外观来看,realY实现了myY,为什么我不能这样做呢?这使得无法干净地编写模拟单元测试.
不,它没有实现myY,因为错误明确指出:
realX does not implement myX (wrong type for Do method)
    have Do() realY
    want Do() myY
方法签名必须与实现接口的类型完全匹配.方法签名不匹配 - 返回类型不同.如果realY工具没关系myY; 签名不一样.