Maison >développement back-end >Golang >Comment créer idiomatiquement une hiérarchie complexe de structures en Go à l'aide d'intégrations ou d'interfaces vides ?

Comment créer idiomatiquement une hiérarchie complexe de structures en Go à l'aide d'intégrations ou d'interfaces vides ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-01 14:42:12253parcourir

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

Manière idiomatique de créer une hiérarchie complexe de structures dans Go

Dans la conception d'une hiérarchie de structures, Go propose deux approches pour organiser les relations de types : l'intégration et les interfaces avec des structures vides. méthodes.

Interface avec les méthodes vides

Approche "méthode vide" de Go utilise des interfaces et des méthodes vides pour représenter les hiérarchies de types. Une méthode vide est une méthode qui n’a aucune implémentation ; son but est uniquement de marquer qu'un type satisfait une interface.

Dans l'exemple fourni, où les types Object, Immovable, Building, Movable, Car et Bike forment une hiérarchie, l'implémentation suivante utilisant des interfaces avec des espaces vides les méthodes seraient considérées comme idiomatiques :

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

Cette méthode documente explicitement les relations de type et empêche l'affectation de incompatibles types.

Incorporation

Go prend également en charge l'intégration, qui permet à une structure d'hériter des méthodes d'une autre structure. En utilisant l'intégration, la hiérarchie pourrait être représentée comme suit :

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
}

L'intégration fournit une approche alternative qui réduit le nombre de méthodes vides en tirant parti du mécanisme de type héritage de Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn