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 widerstehenZum 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?