Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Kelas Abstrak Boleh Dilaksanakan dalam 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:
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!