Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencipta Hierarki Struktur yang Kompleks dalam Go Menggunakan Benam atau Antara Muka Kosong?

Bagaimana untuk Mencipta Hierarki Struktur yang Kompleks dalam Go Menggunakan Benam atau Antara Muka Kosong?

Susan Sarandon
Lepaskan: 2025-01-01 14:42:12
asal
227 orang telah melayarinya

How to Idiomatically Create a Complex Hierarchy of Structs in Go Using Embedding or Empty Interfaces?

Cara Idiomatik untuk Mencipta Hierarki Struktur yang Kompleks dalam Go

Dalam mereka bentuk hierarki struct, Go menyediakan dua pendekatan untuk mengatur perhubungan jenis: benam dan antara muka dengan kosong kaedah.

Antaramuka 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() {}
Salin selepas log masuk

Kaedah ini secara eksplisit mendokumenkan hubungan jenis dan menghalang penugasan yang tidak serasi jenis.

Pembenaman

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
}
Salin selepas log masuk

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!

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