首頁 > 後端開發 > Golang > 主體

Go中如何使用介面實作方法重寫?

Susan Sarandon
發布: 2024-11-13 03:56:02
原創
757 人瀏覽過

How Can Method Overriding Be Achieved in Go Using Interfaces?

Go 中的介面方法重寫

與Java 不同,方法重寫涉及繼承和修改基底類別的實現,Go 提供了一種解決方案介面。

介面定義了類型必須實作的一組方法簽章。透過建立一個具有與所需行為相符的方法的接口,您可以用一種新類型來實現它,以代替原始類型。

要實現此目的,請考慮以下範例:

type Base struct{}

func (base *Base) Get() string {
    return "base"
}

func (base *Base) GetName() string {
    return base.Get()
}
登入後複製

要實現方法重寫,請建立一個介面:

type Getter interface {
    Get() string
}
登入後複製

修改Base 類型以嵌入Getter 介面:

type Base struct {
    Getter
}
登入後複製

現在,建立一個新類型嵌入Base 並實作Get方法:

type Sub struct {
    Base
}

func (sub *Sub) Get() string {
    return "Sub"
}
登入後複製

最後,修改Base 中的GetName 方法以利用Getter 介面:

func (base *Base) GetName() string {
    if g, ok := base.Getter.(Getter); ok {
        return g.Get()
    } else {
        return base.Get()
    }
}
登入後複製

這種方法可以讓您保留Base 的現有消費者同時提供了在子類別中重寫Get 方法的能力。

或者,您也可以使用以下方法:

func New() *Sub {
    userType := &Sub{}
    userType.Getter = interface{}(userType).(Getter)
    return userType
}
登入後複製

這種情況下,您必須手動設定 Getter 中的欄位用於啟用方法重寫的使用者程式碼。兩種方法都達到了預期的結果,但第一種方法在 Go 中被認為更慣用。

以上是Go中如何使用介面實作方法重寫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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