¿Por qué me gustan las interfaces Go?

No hace mucho tiempo, comencé a aprender Go y descubrí que allí, muchas cosas aparentemente familiares funcionan de manera diferente. Las interfaces están entre ellas. Anteriormente, no pensaba en el hecho de que la escritura de patos puede estar en un idioma estáticamente escrito. Ahora me parece que esto es lógico y razonable. Aquí describiré una razón que ha determinado en gran medida mi actitud hacia las interfaces en Go.

Go es un lenguaje bastante sólido


Perdón por el juego de palabras, no pude resistir

Sobre el tema "¿Es Go un lenguaje orientado a objetos?" Se escriben muchos artículos, incluso sobre Habré. Pero no tan a menudo, cuando se plantea este tema, hablan de principios SÓLIDOS y, en general, rara vez se refieren a los últimos (en orden, pero no en importancia): el principio de inversión de dependencia (DIP). Si se olvida, generalmente se formula de la siguiente manera:
Las abstracciones no deberían depender de los detalles. Los detalles deben depender de abstracciones.
Probablemente la herramienta más poderosa que se inventó para implementar este principio: las interfaces. Si desea aclarar el inverso de las dependencias para usted, aquí hay un buen artículo . Por cierto, la imagen es de allí.



Suponga que Foo y Bar están en diferentes módulos: F y B. Pero luego, para implementar la interfaz, debemos importar la interfaz IBar de F a B, y luego transferir de alguna manera su implementación de nuevo a F. En cierto sentido, una dependencia cíclica entre paquetes (no en términos de comportamiento, sino en términos de importación). Aquí es donde la implementación implícita de las interfaces nos ayuda. Podemos importar Bar de B a F, y Go determinará si implementa IBar o no. En este caso, la especificación explícita de interfaces durante la implementación se vuelve redundante.

Unas palabras al final


Interfaces en Go es una herramienta poderosa, incluso para la inversión de dependencia. Pero no debe crearlos para todo, así que cada vez pregúntese: ¿por qué está haciendo esto?

¿Qué le gusta / disgusta del sistema de tipos Go?

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


All Articles