带有指向接口模拟错误的指针的结构
Posted
技术标签:
【中文标题】带有指向接口模拟错误的指针的结构【英文标题】:Struct with an pointer to an Interface mock error 【发布时间】:2022-01-24 01:29:44 【问题描述】:package main
import (
"github.com/golang/mock/gomock"
"testing"
)
type Talker interface
talk() string
type Person struct
moth *Talker
func (p *Person) speak() string
return (*p.moth).talk()
func TestPerson(t *testing.T)
ctrl := gomock.NewController(t)
mockTalker := NewMockTalker(ctl)
person := Personmoth: mockTalker
假设我已经使用 mockgen 为 Talker 界面创建了一个模拟。
我在创建 Personmoth: mockTalker
时遇到错误。我无法通过mockTalker
。
【问题讨论】:
【参考方案1】:不要用户指针界面。本质上接口就是指针
type Person struct
moth Talker
通常,如果函数要返回interface
,它会通过指针返回新的结构体。
import "fmt"
type I interface
M()
type S struct
func (s *S) M()
fmt.Println("M")
func NewI() I
return &S
func main()
i := NewI()
i.M()
【讨论】:
【参考方案2】:在您的 Person
结构中,moth 字段是 *Talker
类型。它是Talker
接口的指针类型。 NewMockTalker(ctl)
返回 Talker
类型模拟实现。
你可以做两件事来解决这个问题。
-
将
Person
's moth 字段的类型更改为Talker
。
type Person struct
moth Talker
或
-
将
mockTalker
的指针引用传递给person
初始化`
person := Personmoth: &mockTalker
【讨论】:
以上是关于带有指向接口模拟错误的指针的结构的主要内容,如果未能解决你的问题,请参考以下文章
结构中指向数组的 cudaFree 指针上的 CUDA 分段错误
hashedmap和指向结构的指针:CXX0030:错误:无法计算表达式