带有指针接收器的 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中文网其他相关文章!