我有一个导出函数的包,该函数返回我无法控制的结构指针。我想包装该函数以提供依赖项,以便进行一些单元测试。我的想法是我要假货,而不是外部包装给我的东西。
一个例子如下:
<link rel="shortcut icon" href="fav.ico" />
这将导致错误:
/////////////////////////////////////
// External Package I can't control.
/////////////////////////////////////
package ex
type Foo struct {
v int
}
func (f *Foo) GetV() int {
return f.v
}
func CreateFoo(v int) *Foo {
return &Foo{v: v}
}
////////////////////////////////////
// Local Package I'm testing.
////////////////////////////////////
type IFoo interface {
GetV() int
}
type factory = func(v int) IFoo
var factoryFn factory = ex.CreateFoo
由于我认为cannot use CreateFoo (type func(int) *Foo) as type func(int) IFoo in assignment
是*Foo
,为什么不呢?我想念什么?有没有办法实现我想要做的事情,给自己一个这样的钩子?
答案 0 :(得分:1)
返回IFoo的函数类型与返回* Foo的函数不同,即使Foo满足IFoo的要求,Go也不支持返回类型的协方差。
您需要包装函数
var factoryFn = func(v int) IFoo { return CreateFoo(v) }