首页 > 后端开发 > Golang > 正文

Go 是否支持多态性:寻找 Setter 方法的解决方法?

Patricia Arquette
发布: 2024-11-25 13:27:11
原创
187 人浏览过

Does Go Support Polymorphism: Finding Workarounds for Setter Methods?

Go 中的多态性:存在吗?

多态性,即不同类的对象具有相同方法的能力,是一个基本方面面向对象编程。然而,在 Go 中,接口的 setter 方法似乎不可用。

让我们看一个基本示例:

type MyInterfacer interface {
    Get() int
    Set(i int)
}

type MyStruct struct {
    data int
}

func (this MyStruct) Get() int {
    return this.data
}

func (this MyStruct) Set(i int) {
    this.data = i
}
登录后复制

运行此代码时,MyStruct 类型的 Set 方法失败,因为接收者不是指针。当函数退出时,对此所做的任何更改都会丢失。

人们可能会尝试通过将接收器更改为指针来修复此问题:

func (this *MyStruct) Set(i int) {
    this.data = i
}
登录后复制

但是,这会导致编译错误。 Go 中的接口方法不能有指针接收器。

那么,在这种情况下有没有办法实现多态性?

最接近的替代方法是使用接口类型和实现接口的匿名结构:

type MyInterfacer interface {
    Get() int
    Set(i int)
}

var mi MyInterfacer = &MyStruct{123}
fmt.Println(mi.Get()) // prints 123

mi.Set(456)
fmt.Println(mi.Get()) // prints 456
登录后复制

虽然此解决方案不是真正的多态性,但它利用接口来提供一种干净而灵活的方式来操作不同类型的对象。

以上是Go 是否支持多态性:寻找 Setter 方法的解决方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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