带有指向接口模拟错误的指针的结构

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

【讨论】:

以上是关于带有指向接口模拟错误的指针的结构的主要内容,如果未能解决你的问题,请参考以下文章

C - 指向结构指针的指针 - 分段错误

结构中指向数组的 cudaFree 指针上的 CUDA 分段错误

hashedmap和指向结构的指针:CXX0030:错误:无法计算表达式

使用带有结构/数组的头文件的指针问题,导致多重定义错误(C)

c ++如何获取指向另一个类中的当前对象的指针?

[使用结构指针的c ++分段错误