【发布时间】:2018-08-21 08:52:37
【问题描述】:
我有一个包,里面有两个接口
package main
type A interface {
Close()
}
type B interface {
Connect() (A, error)
}
我还有两个实现这些接口的结构
type C struct {
}
func (c *C) Close() {
}
type D struct {
}
func (d *D) Connect() (*C, error) {
c := new(C)
return c, nil
}
接下来我有一个函数,它作为参数需要一个实现接口 B 的对象
func test(b B) {
}
最后,在 main() 函数中,我创建了 D 结构对象并想调用 test() 函数
func main() {
d := new(D)
test(d)
}
如果我尝试构建该软件包,我会遇到错误。
在测试的参数中不能使用 d(类型 *D)作为类型 B: *D 没有实现 B(Connect 方法的类型错误) 有 Connect() (*C, 错误) 想要 Connect() (A, error)
这是我的代码的简单示例,我使用外部包并希望模拟结构进行测试。使用接口而不是类型有什么解决方案吗?
【问题讨论】:
-
将
Connect()改为返回(A, error)。