首页 > 后端开发 > Golang > 为什么我的带有指针接收器的 Go 方法无法实现接口?

为什么我的带有指针接收器的 Go 方法无法实现接口?

Barbara Streisand
发布: 2024-12-13 15:47:11
原创
448 人浏览过

Why Does My Go Method with a Pointer Receiver Fail to Implement an Interface?

带有指针接收器的 Golang 方法[重复]

问题:

在 Go 中,当创建带有指针接收器的方法并实现接口时,可能会出现以下错误发生:

cannot use obj (type Implementation) as type IFace in return argument: Implementation does not implement IFace (GetSomeField method has pointer receiver)
登录后复制

答案:

要解决此错误,请确保指向结构的指针实现该接口。这允许该方法在不创建副本的情况下修改实际实例的字段。

代码修改:

将有问题的行替换为:

return &obj
登录后复制

解释:

通过返回指向struct,它实现接口,同时允许方法修改实际实例。

示例(已修改):

package main

import (
    "fmt"
)

type IFace interface {
    SetSomeField(newValue string)
    GetSomeField() string
}

type Implementation struct {
    someField string
}

func (i *Implementation) GetSomeField() string {
    return i.someField
}

func (i *Implementation) SetSomeField(newValue string) {
    i.someField = newValue
}

func Create() *Implementation {
    return &Implementation{someField: "Hello"}
}

func main() {
    var a IFace
    a = Create()
    a.SetSomeField("World")
    fmt.Println(a.GetSomeField())
}
登录后复制

通过使用指针接收器并确保指针实现了接口,您可以在实现所需方法的同时成功修改结构体的实际实例。

以上是为什么我的带有指针接收器的 Go 方法无法实现接口?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板