Pourquoi j'aime les interfaces Go

Il n'y a pas si longtemps, j'ai commencé à apprendre Go et j'ai constaté que là-bas, beaucoup de choses apparemment familières fonctionnent différemment. Les interfaces en font partie. Auparavant, je ne pensais pas au fait que la frappe de canard peut être dans une langue typée statiquement. Maintenant, il me semble que c'est logique et raisonnable. Je décrirai ici une raison qui a largement déterminé mon attitude vis-à-vis des interfaces dans Go.

Go est un langage assez solide


Désolé pour le jeu de mots, je n'ai pas pu résister

Sur le sujet «Est-ce que Go est un langage orienté objet?» de nombreux articles sont écrits, notamment sur Habré. Mais pas si souvent, lorsque ce sujet est soulevé, ils parlent des principes SOLIDES et généralement rarement des derniers (dans l'ordre, mais pas en importance) d'entre eux - le principe de l'inversion de dépendance (DIP). En cas d'oubli, il est généralement formulé comme suit:
Les abstractions ne devraient pas dépendre des détails. Les détails doivent dépendre des abstractions.
Probablement l'outil le plus puissant qui a été inventé pour mettre en œuvre ce principe - les interfaces. Si vous souhaitez clarifier vous-même l'inverse des dépendances, voici un bon article . Soit dit en passant, l'image est de là.



Supposons que Foo et Bar se trouvent dans des modules différents: F et B. Mais ensuite, pour implémenter l'interface, nous devons importer l'interface IBar de F dans B, puis retransférer en quelque sorte son implémentation vers F. Dans un sens, une dépendance cyclique entre les packages (pas en termes de comportement, mais en termes d'importation). C'est là que l'implémentation implicite des interfaces vient à notre aide. Nous pouvons importer Bar de B en F, et Go le découvrira lui-même s'il implémente IBar ou non. Dans ce cas, la spécification explicite des interfaces lors de l'implémentation devient redondante.

Quelques mots à la fin


Interfaces in Go est un outil puissant, y compris pour l'inversion de dépendance. Mais vous ne devez pas les créer pour tout, alors à chaque fois demandez-vous - pourquoi faites-vous cela.

Qu'est-ce que vous aimez / n'aimez pas dans le système de type Go?

Source: https://habr.com/ru/post/fr451240/


All Articles