我希望有这样的东西:
type MyInterface interface {
MyMetod(interface{})
}
并拥有类型
type MyType struct {}
方法
func (mt *MyType) MyMethod(SomeConcreteType) {
// body
}
实施 MyInterface 。
但似乎Go无法解决这个问题。我收到一条错误,指出它有 MyMethod(SomeConcreteType),但它需要 MyMethod(interface {})。为什么会如此,这个问题的解决方案是什么?
答案 0 :(得分:4)
这是为什么?这是语言设计。
解决方案是匹配界面:
type MyType struct{}
func (mt *MyType) MyMethod(v interface{}) {
v, ok := v.(SomeConcreteType)
if !ok {
panic("!ok")
}
v.doStuff()
}