首頁 > 後端開發 > Golang > Go中如何使用setter實現多型?

Go中如何使用setter實現多型?

Linda Hamilton
發布: 2024-12-10 10:41:10
原創
883 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板