Dalam mereka bentuk hierarki struct, Go menyediakan dua pendekatan untuk mengatur perhubungan jenis: benam dan antara muka dengan kosong kaedah.
Pendekatan "kaedah kosong" Go menggunakan antara muka dan kaedah kosong untuk mewakili hierarki jenis. Kaedah kosong ialah kaedah yang tidak mempunyai sebarang pelaksanaan; tujuannya adalah semata-mata untuk menandakan bahawa jenis memenuhi antara muka.
Dalam contoh yang diberikan, di mana jenis Objek, Tak Alih, Bangunan, Alih, Kereta dan Basikal membentuk hierarki, pelaksanaan berikut menggunakan antara muka kosong kaedah akan dianggap idiomatik:
type Object interface { object() } type Immovable interface { Object immovable() } type Building struct { ... } type Mountain struct { ... } type Movable interface { Object movable() } type Car struct { ... } type Mountain struct { ... } func (*Building) object() {} func (*Mountain) object() {} func (*Car) object() {} func (*Bike) object() {} func (*Building) immovable() {} func (*Mountain) immovable() {} func (*Car) movable() {} func (*Bike) movable() {}
Kaedah ini secara eksplisit mendokumenkan hubungan jenis dan menghalang penugasan yang tidak serasi jenis.
Go juga menyokong pembenaman, yang membenarkan struct mewarisi kaedah struct lain. Menggunakan pembenaman, hierarki boleh diwakili seperti berikut:
type ObjectImpl struct {} func (o *ObjectImpl) object() {} type ImmovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Immovable) immovable() {} type Building struct { *ImmovableImpl // Embed ImmovableImpl struct } type MovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Movable) movable() {} type Car struct { *MovableImpl // Embed MovableImpl struct } type Bike struct { *MovableImpl // Embed MovableImpl struct }
Pembenaman menyediakan pendekatan alternatif yang mengurangkan bilangan kaedah kosong dengan memanfaatkan mekanisme seperti warisan Go.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Hierarki Struktur yang Kompleks dalam Go Menggunakan Benam atau Antara Muka Kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!