gpt4 book ai didi

go - 返回结构指针的函数作为返回接口(interface)的函数

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:05 25 4
gpt4 key购买 nike

我有一个导出函数的包,该函数返回一个我无法控制的结构指针。我想包装该函数以提供依赖接缝,以便我可以进行一些单元测试。这个想法是我想要一个假货而不是外部包装给我的东西。

一个例子如下:

/////////////////////////////////////
// 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

这会导致错误:不能在赋值中使用 CreateFoo (type func(int) *Foo) 作为 type func(int) IFoo

因为我认为 *Foo 是一个 IFoo,为什么不呢?我错过了什么?有没有办法实现我想要做的事情,给自己一个这样的钩子(Hook)?

Playground 示例链接:https://play.golang.org/p/FDckAQGNRgA

最佳答案

返回IFoo的函数类型与返回*Foo的函数类型不同,即使Foo满足IFoo的要求,Go不支持返回类型的协变。

你需要包装函数

var factoryFn = func(v int) IFoo { return CreateFoo(v) }

关于go - 返回结构指针的函数作为返回接口(interface)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55367797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com