首頁 > 後端開發 > Golang > Go 是否支援多態性:尋找 Setter 方法的解決方法?

Go 是否支援多態性:尋找 Setter 方法的解決方法?

Patricia Arquette
發布: 2024-11-25 13:27:11
原創
256 人瀏覽過

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

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