Maison >développement back-end >Golang >Comment puis-je renvoyer un type concret à partir d'une méthode d'interface dans 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>
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>
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>
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!