我敢肯定,标题令人困惑,但很难描述我的意思。
我想创建一个有两种方法的 Go 接口;第一个返回一个值,第二个接受一个值。我想确保方法 1 返回与方法 2 接受的类型相同的类型,而不指定类型是什么(除了它是一个结构)。例如:
type MyInterface interface {
Method1() MyType
Method2(MyType) error
}
whereMyType可以是任何类型(结构),只要它在方法 1 和方法 2 中都相同。
有没有办法在 Go 中做到这一点?
编辑:
根据@iLoveReflection 的回答,我尝试了以下方法:
package main
type MyInterface interface {
GetType() interface{}
UseType(input interface{})
}
type MyImplementation struct{}
type MyType struct {
}
func (i MyImplementation) GetType() MyType {
return MyType{}
}
func (i MyImplementation) UseType(input MyType) {
return
}
func test(input MyInterface) {
return
}
func assertArgAndResult() {
var v MyImplementation
v.UseType(v.GetType())
}
func main() {
test(MyImplementation{})
}
所以基本上,我指定了一个接口MyInterface(MyImplementation
assertArgAndResult()正在按预期工作,并确保MyImplementation满足要求。但是,我在函数中得到一个编译错误main():
cannot use MyImplementation literal (type MyImplementation) as type MyInterface in argument to test:
MyImplementation does not implement MyInterface (wrong type for GetType method)
have GetType() MyType
want GetType() interface {}
犯罪嫌疑人X
相关分类