Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Kelas Abstrak Boleh Dilaksanakan dalam Go?

Bagaimanakah Kelas Abstrak Boleh Dilaksanakan dalam Go?

DDD
Lepaskan: 2024-11-29 10:50:11
asal
561 orang telah melayarinya

How Can Abstract Classes Be Implemented in Go?

Melaksanakan Kelas Abstrak dalam Go

Dalam Go, kelas abstrak tidak disokong secara asli. Walau bagaimanapun, adalah mungkin untuk mencontohi tingkah laku kelas abstrak dengan menggunakan pendekatan yang melibatkan:

  1. Mentakrifkan antara muka dengan kaedah abstrak yang dikehendaki.
  2. Mencipta jenis dengan penerima terbenam yang memenuhi antara muka dan menyediakan pelaksanaan lalai untuk kaedah.

Contoh

Pertimbangkan kod berikut, yang mentakrifkan Daemon jenis abstrak dengan kaedah mula dan lakukan:

type Daemon interface {
    start(time.Duration)
    doWork()
}
Salin selepas log masuk

Untuk menyediakan pelaksanaan lalai, kami boleh mencipta jenis abstrak (cth. AbstractDaemon) yang membenamkan Daemon antara muka dan menyediakan pelaksanaan lalai untuk kaedah:

type AbstractDaemon struct {
    Daemon
}

func (a *AbstractDaemon) start(duration time.Duration) {
    ticker := time.NewTicker(duration)

    // this will call daemon.doWork() periodically
    go func() {
        for {
            <-ticker.C
            a.doWork()
        }
    }()
}
Salin selepas log masuk

Jenis Konkrit

Kini, kita boleh mencipta jenis konkrit yang diwarisi daripada jenis AbstractDaemon dan menyediakan pelaksanaan untuk buat kerja kaedah:

type ConcreteDaemonA struct {
    *AbstractDaemon
    foo int
}

func (a *ConcreteDaemonA) doWork() {
    a.foo++
    fmt.Println("A: ", a.foo)
}

type ConcreteDaemonB struct {
    *AbstractDaemon
    bar int
}

func (b *ConcreteDaemonB) doWork() {
    b.bar--
    fmt.Println("B: ", b.bar)
}
Salin selepas log masuk

Penggunaan

Kita boleh menggunakan jenis konkrit ini untuk mencipta kejadian dan menggunakan kaedahnya:

var dA Daemon = newConcreteDaemonA()
var dB Daemon = newConcreteDaemonB()

dA.start(1 * time.Second)
dB.start(5 * time.Second)

time.Sleep(100 * time.Second)
Salin selepas log masuk

Pendekatan ini menyediakan mekanisme untuk melaksanakan kelas abstrak dalam Go, membenarkan pelaksanaan kaedah lalai dan berbilang warisan melalui pembenaman.

Atas ialah kandungan terperinci Bagaimanakah Kelas Abstrak Boleh Dilaksanakan dalam Go?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan