interface 嵌套 interface 遇到的问题
标题表述可能不准确,直接上代码
比如
type I interface {
Double() I
}
但
type T int
func (t T) Double() T {
return t*2
}
没有办法满足这个条件
想请教一下各位,如果想实现这类操作,该如何处理,谢谢
----------------------- 以下是精选回复-----------------------
答:64 views, 0 replies
答:func (t T) Double() I {
return T(t*2)
}
答:两个函数类型都不一样当然匹配不了
两种办法,一种是接收器改成指针*T 直接修改,去掉返回值。
如果你非要传值的话,可以包装一层空的 interface{},使用时再释放出来,如下:
type IT interface{
Foo() interface{}
}
type CT int
func (c CT)Foo() interface{} {
return interface{}(c*2)
}
func main(){
var v IT = CT(2)
v = v.Foo().(IT)
}
楼上那种做法比较 expedient,如果要满足多个 interface 就不行了。
答:接口方法的签名必须一致,不支持协变 /逆变。
答:package main
import "fmt"
type People interface {
Get() People
}
type Teacher struct {
}
func (Teacher) Get() People {
return Teacher{}
}
func main() {
t := Teacher{}
fmt.Println(t.Get())
}
答:指纹需要完全一致,你返回需要返回 I
0条评论