Warum ich Go-Schnittstellen mag

Vor nicht allzu langer Zeit habe ich angefangen, Go zu lernen und festgestellt, dass dort viele scheinbar vertraute Dinge anders funktionieren. Schnittstellen gehören dazu. Bisher habe ich nicht darüber nachgedacht, dass das Tippen von Enten in einer statisch typisierten Sprache erfolgen kann. Nun scheint es mir, dass dies logisch und vernünftig ist. Hier werde ich einen Grund beschreiben, der meine Einstellung zu Schnittstellen in Go weitgehend bestimmt hat.

Go ist eine ziemlich solide Sprache


Entschuldigung für das Wortspiel, konnte nicht widerstehen

Zum Thema "Ist Go eine objektorientierte Sprache?" Viele Artikel sind geschrieben, auch über Habré. Aber nicht so oft, wenn dieses Thema angesprochen wird, sprechen sie über SOLID-Prinzipien und im Allgemeinen selten über das letzte (in der Reihenfolge, aber nicht in der Wichtigkeit) von ihnen - das Prinzip der Abhängigkeitsinversion (DIP). Wenn es vergessen wird, wird es normalerweise wie folgt formuliert:
Abstraktionen sollten nicht von den Details abhängen. Details müssen von Abstraktionen abhängen.
Wahrscheinlich das mächtigste Werkzeug, das erfunden wurde, um dieses Prinzip zu implementieren - Schnittstellen. Wenn Sie die Umkehrung von Abhängigkeiten selbst klären möchten, finden Sie hier einen guten Artikel . Das Bild ist übrigens von dort.



Angenommen, Foo und Bar befinden sich in verschiedenen Modulen: F und B. Um die Schnittstelle zu implementieren, müssen wir die IBar-Schnittstelle von F nach B importieren und ihre Implementierung dann irgendwie zurück nach F übertragen. In gewissem Sinne eine zyklische Abhängigkeit zwischen Paketen (nicht in Bezug auf das Verhalten, sondern in Bezug auf den Import). Hier hilft uns die implizite Implementierung der Schnittstellen. Wir können Bar von B nach F importieren, und Go wird selbst herausfinden, ob es IBar implementiert oder nicht. In diesem Fall wird die explizite Angabe von Schnittstellen während der Implementierung überflüssig.

Ein paar Worte am Ende


Interfaces in Go ist ein leistungsstarkes Tool, auch zur Abhängigkeitsinversion. Aber Sie sollten sie nicht für alles erstellen, also fragen Sie sich jedes Mal, warum Sie das tun.

Was magst / nicht magst du am Go-Typ-System?

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


All Articles