标题表述可能不准确,直接上代码
比如
type I interface {
Double() I
}
但
type T int
func (t T) Double() T {
return t*2
}
没有办法满足这个条件
想请教一下各位,如果想实现这类操作,该如何处理,谢谢
1
input2output OP |
2
hst001 2020-03-08 11:09:40 +08:00 1
func (t T) Double() I {
return T(t*2) } |
3
Buges 2020-03-08 11:28:26 +08:00 1
两个函数类型都不一样当然匹配不了
两种办法,一种是接收器改成指针*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 就不行了。 |
4
reus 2020-03-08 11:36:32 +08:00 1
接口方法的签名必须一致,不支持协变 /逆变。
|
5
TypeErrorNone 2020-03-08 12:15:57 +08:00 1
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()) } |
6
janxin 2020-03-08 12:26:25 +08:00 1
指纹需要完全一致,你返回需要返回 I
|