- 主题:求教interface中方法返回不同类型怎么写呢?
下边是简化了的代码PersonA和PersonB都想实现接口Man的say方法,但是返回值不同,那么接口里的Say的返回值咋写呢?为了方便写的下边代码,
实际需求是xorm里定义的多个Model,都有List方法,只是返回值不同,是各自struct的切片,想弄一个接口然后方法调用他们的List方法,但是不知道咋写,写个了简单的代码测试也不好使,接口里的say返回值写不出万能的来,写PersonA那只有他能用写B就只有B能用,咋写能两一块都能用呢?
type PersonA struct{}
func (pa *PersonA) Say(name string) PersonA {
fmt.Println(name)
return PersonA{}
}
type PersonB struct{}
func (pb *PersonB) Say(name string) PersonB {
fmt.Println(name)
return PersonB{}
}
type Man interface {
Say(name string)
}
func aaa() {
ppp := PersonA{}
var pa Man
pa = &ppp
pa.Say("mike")
}
--
FROM 221.219.185.*
接口申明为这样?
type Man interface {
Say(name string) Man
}
【 在 mrg (Mr.G) 的大作中提到: 】
: 下边是简化了的代码PersonA和PersonB都想实现接口Man的say方法,但是返回值不同,那么接口里的Say的返回值咋写呢?为了方便写的下边代码,
: 实际需求是xorm里定义的多个Model,都有List方法,只是返回值不同,是各自struct的切片,想弄一个接口然后方法调用他们的List方法,但是不知道咋写,写个了简单的代码测试也不好使,接口里的say返回值写不出万能的来,写PersonA那只有他能用写B就只有B能用,咋写能两一
: type PersonA struct{}
: ...................
--
FROM 123.122.162.*
实现了 写叉了 第二行的 Man想写PersionA或B
找到方法了 返回类型全写空接口就实现了,然后具体实现里再去断言类型
【 在 atIE (a neck tie) 的大作中提到: 】
: 接口申明为这样?
: type Man interface {
: Say(name string) Man
: ...................
--
FROM 221.219.185.*
等1.8出了,试试泛型吧。
--
FROM 114.251.232.*