Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Penggantian Kaedah Boleh Dicapai dalam Go Menggunakan Antara Muka?

Bagaimanakah Penggantian Kaedah Boleh Dicapai dalam Go Menggunakan Antara Muka?

Susan Sarandon
Lepaskan: 2024-11-13 03:56:02
asal
826 orang telah melayarinya

How Can Method Overriding Be Achieved in Go Using Interfaces?

Kaedah Overriding dalam Go dengan Antara Muka

Tidak seperti Java, di mana kaedah overriding melibatkan pewarisan dan pengubahsuaian pelaksanaan kelas asas, Go menawarkan penyelesaian menggunakan antara muka.

Antara muka mentakrifkan satu set tandatangan kaedah yang mesti dilaksanakan oleh sesuatu jenis. Dengan mencipta antara muka dengan kaedah yang sepadan dengan gelagat yang diingini, anda boleh melaksanakannya dalam jenis baharu yang boleh digunakan sebagai ganti yang asal.

Untuk mencapai ini, pertimbangkan contoh berikut:

type Base struct{}

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

func (base *Base) GetName() string {
    return base.Get()
}
Salin selepas log masuk

Untuk melaksanakan penggantian kaedah, buat antara muka:

type Getter interface {
    Get() string
}
Salin selepas log masuk

Ubah suai jenis Asas untuk membenamkan antara muka Getter:

type Base struct {
    Getter
}
Salin selepas log masuk

Sekarang, buat jenis baharu yang membenamkan Base dan melaksanakan kaedah Get:

type Sub struct {
    Base
}

func (sub *Sub) Get() string {
    return "Sub"
}
Salin selepas log masuk

Akhir sekali, ubah suai kaedah GetName dalam Base untuk menggunakan antara muka Getter:

func (base *Base) GetName() string {
    if g, ok := base.Getter.(Getter); ok {
        return g.Get()
    } else {
        return base.Get()
    }
}
Salin selepas log masuk

Pendekatan ini membolehkan anda mengekalkan pengguna sedia ada Base sambil menyediakan keupayaan untuk mengatasi kaedah Dapatkan dalam subkelas.

Sebagai alternatif, anda juga boleh menggunakan kaedah berikut:

func New() *Sub {
    userType := &Sub{}
    userType.Getter = interface{}(userType).(Getter)
    return userType
}
Salin selepas log masuk

Dalam kes ini, anda mesti menetapkan medan Getter secara manual dalam kod pengguna untuk membolehkan kaedah mengatasi. Kedua-dua kaedah mencapai hasil yang diingini, tetapi pendekatan pertama dianggap lebih idiomatik dalam Go.

Atas ialah kandungan terperinci Bagaimanakah Penggantian Kaedah Boleh Dicapai dalam Go Menggunakan Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan