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

Bagaimanakah Kelas Abstrak Boleh Dilaksanakan dalam Go?

DDD
DDDasal
2024-11-29 10:50:11558semak imbas

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()
}

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()
        }
    }()
}

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)
}

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)

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!

Kenyataan:
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