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

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

Linda Hamilton
Linda Hamilton原創
2024-12-10 10:41:10888瀏覽

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