首页 >后端开发 >Golang >Go 是否支持多态性:寻找 Setter 方法的解决方法?

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

Patricia Arquette
Patricia Arquette原创
2024-11-25 13:27:11249浏览

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中文网其他相关文章!

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