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