首页 >后端开发 >Golang >Go中如何使用setter实现多态?

Go中如何使用setter实现多态?

Linda Hamilton
Linda Hamilton原创
2024-12-10 10:41:10935浏览

How Can Polymorphism Be Achieved with Setters in Go?

Go 中的多态性:解码 Setter 难题

在面向对象编程领域,多态性使得能够处理不同类的对象作为公共超类型的实例。然而,在 Go 中,问题出现了:多态性是否存在,如果存在,它是如何体现的?

考虑以下 Go 代码,其中尝试创建具有 getter 和 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
}

但是,setter 方法遇到了一个问题:接收者 this MyStruct 不是指针,导致方法内所做的任何更改一旦丢失退出。此外,使接收器成为 *MyStruct 会阻碍编译。

为了解决这个问题,代码的更正版本使用了指针:

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
}

通过引入指针,我们可以在setter 方法持续超出其范围。虽然这种技术可能不构成传统意义上严格的多态性,但它坚持了良好的 Go 实践,并为最初的问题提供了可行的解决方案。

以上是Go中如何使用setter实现多态?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn