当前位置: 首页 > 面试题库 >

在golang中实现接口给出方法有指针的接收者

连昊天
2023-03-14
问题内容

在Golang中工作,正在尝试使用接口将使用相似方法的一组结构归为一组。简而言之,我有这个:

type Person interface {
    BasicInfo() MemberBasicInfo
}

type MemberBasicInfo struct {
    ID                         uint       
    MemberFirstName            string     
    MemberNickname             string     
    MemberEmail                string    
}

然后,应该用作接口的结构:

func (member *Member) BasicInfo() MemberBasicInfo{
    return MemberBasicInfo{
        ID: member.ID,
        ...other mapping here...
    }
}

func (user *User) BasicInfo() MemberBasicInfo{
    return MemberBasicInfo{
        ID: uint(user.ID),
        ...other mapping here...
    }
}

cannot use memberData (type Member) as type Member.Person in return argument: Member does not implement Person (BasicInfo method has pointer receiver)
cannot use memberData (type User) as type Person in return argument: User does not implement Person (BasicInfo method has pointer receiver)

我想念什么?还是我做错了什么?


问题答案:

如果您的接口这样声明

type Person interface {
    BasicInfo() MemberBasicInfo
}

然后,任何实现a的类型BasicInfo() MemberBasicInfo都将满足该接口。

在您的情况下,然后创建此方法:

func (member *Member) BasicInfo() MemberBasicInfo

这意味着类型*Member满足接口。

但是..注意*那里。Member没有实现该接口,而是由*Member谁来实现。

因此,在尝试为接口变量分配类型时,请确保使用指针而不是直接值。

这应该工作:

var p Person
p = &Member{}

但这不会:

var p Person
p = Member{}


 类似资料:
  • 问题内容: 我有这个示例代码 无法正常工作,因为其接收器不是指针类型。 如果我将方法更改为指针接收器,那么我希望它可以正常工作,如下所示: 编译会导致以下错误: 如何在不创建副本的情况下使接口 和 方法实现实际实例的值? 这是一个可入侵的代码段:https : //play.golang.org/p/ghW0mk0IuU 问题答案: 您指向结构的指针应实现该接口。这样,您可以修改其字段。 查看我如

  • 问题内容: 已关闭 。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。 3个月前关闭。 改善这个问题 关于“ X不能实现Y(…方法具有指针接收器) ”的事情已经有一些问答,但是对我来说,他们似乎在谈论不同的事情,而不适用于我的具体情况。 因此,我没有使问题变得非常具体,而是使之变得笼统和抽象-似乎有几种不同的情况可以使此错误发生,请有人总结一

  • 问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种

  • 问题内容: 我一直在从关于指针接收器的话题中出错,我决定用谷歌搜索术语的含义,并且阅读了有关指针接收器的不同资源和文档。例如:http : //golang.org/doc/faq和http://jordanorelli.com/post/32665860244/how- to-use-interfaces-in-go。 虽然,尽管他们谈论这些术语,但仍未能准确定义它们。不过,从上下文来看,我认为

  • 问题内容: 在用于golang的mongodb驱动程序中,包含以下代码: 接口清零器的定义如下: 当我实现我的结构 有用。但是,当我使用指针接收器实现IsZero方法时: 类型声明失败,并且IsZero无法执行。 谁可以给我解释一下这个? 问题答案: 据推测某处之上的有上的开关 如果您在Reflection包中查看,则此处的文档 是其中一种,又是另一种。在switch语句中,它不匹配,因为该方法的

  • 问题内容: 我最近正在研究虹膜框架。在实现处理程序时遇到一个问题。如下所示: 为了使用此控制器,我实现了以下输入脚本: 但是,当我编译代码时,收到以下错误消息: 在我将声明更改为: 然后,编译器通过,没有任何抱怨。 问题是:我认为以下语句是相等的,因为GO编译器将在表下进行转换: 为什么我不能用作为参数,而不是作为参数传递给? 感谢您的宝贵时间和分享。 问题答案: 参阅文件: 类型可能具有与之关联