Maison > développement back-end > Golang > le corps du texte

Comment puis-je renvoyer un type concret à partir d'une méthode d'interface dans Go ?

DDD
Libérer: 2024-10-26 22:23:03
original
817 Les gens l'ont consulté

 How Can I Return a Concrete Type from an Interface Method in Go?

Méthode d'interface renvoyant une interface et des types concrets

Dans Go, une méthode d'interface renvoyant une interface offre une flexibilité pour les implémentations de types. Cependant, tenter d'implémenter une telle méthode avec un type concret peut entraîner des erreurs.

Considérons l'exemple :

<code class="go">func GetStringer() fmt.Stringer</code>
Copier après la connexion

Où GetStringer est une méthode d'interface renvoyant l'interface fmt.Stringer.

Si un type concret, tel que Foo, est implémenté pour renvoyer une valeur de lui-même (*Foo), une erreur est rencontrée. En effet, Foo n'implémente pas directement fmt.Stringer.

Pour résoudre ce problème, plusieurs approches peuvent être adoptées :

Utilisation d'un type d'adaptateur

Créez un type d'adaptateur qui enveloppe le type de béton et est conforme à l'interface requise :

<code class="go">type MyBar struct{ Bar }

func (b *MyBar) GetStringer() fmt.Stringer {
    return b.Bar.GetStringer()
}</code>
Copier après la connexion

Cette approche permet une extension sans modifier le type Bar d'origine.

Enveloppement avec le Interface

Alternativement, le type concret peut être directement enveloppé avec l'interface requise :

<code class="go">func (b *Bar) GetStringer() fmt.Stringer {
    return &Foo{"foo"}
}</code>
Copier après la connexion

Ici, le type concret Bar fournit une implémentation de la méthode GetStringer qui renvoie une instance du type Foo, qui implémente fmt.Stringer.

Les deux méthodes fournissent des options pour s'adapter aux retours de méthodes d'interface avec des types concrets dans Go. L'approche appropriée dépend des exigences spécifiques et de l'architecture du code.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!