Go vs. Python: Wie man wählt

Wenn es um Benutzerfreundlichkeit und Bequemlichkeit für den Entwickler geht und die Entwicklungsgeschwindigkeit beschleunigt, stehen zwei Programmiersprachen über dem Paket - Python und Go. Heute ist Python eine Hauptstütze für Skripte, Entwickler, maschinelles Lernen und Testen, während Go die neue Welle des container-basierten, Cloud-nativen Computing vorantreibt.

Manchmal liegt die Wahl zwischen Python und Go auf der Hand: Wählen Sie Python für sein reichhaltiges Ökosystem und Go für seine Ausführungsgeschwindigkeit. Aber manchmal ist die Wahl nicht so offensichtlich. In diesem Artikel werden die wichtigsten Unterschiede zwischen den beiden Sprachen erläutert und die Vor- und Nachteile hervorgehoben, damit Sie die richtige Sprache für den jeweiligen Job auswählen können.

Go vs. Python: Entwicklerkomfort

Python und Go teilen den Ruf, bequem zu arbeiten. Beide Sprachen haben eine einfache und unkomplizierte Syntax und einen kleinen und leicht zu merkenden Funktionsumfang.

Sowohl Python als auch Go haben auch einen kurzen Zyklus zum Bearbeiten, Kompilieren und Ausführen. Python hat keine Kompilierungsphase - es wird interpretiert - daher werden Skripte fast sofort ausgeführt. Go kompiliert vorzeitig, aber die Kompilierungsphase ist weitaus schneller als die von Sprachen wie C ++. Go fühlt sich eher wie eine Skriptsprache an, mit der man arbeiten kann, als wie eine Sprache, die vorab kompiliert wurde.

Python verwendet dynamische Typisierungsfunktionen, die es einfacher machen, Anwendungen schnell zu prototypisieren. Das Beschriften von Dingen mit Typen ist optional und kann durchgeführt werden, um zusätzliche Programmkorrektheit zu erzwingen (eine gute Idee bei großen Projekten), ist jedoch nie erforderlich. Größere Codebasen können ohne Typen unhandlich werden.

In Go's Fall ist die Eingabe streng, wird aber in den meisten Fällen leicht abgeleitet, sodass sie weniger umständlich ist. Dies bedeutet auch, dass größere Codebasen sofort einfacher zu verwalten sind, da Go-Programmierer der Tradition der Verwendung von Typen gefolgt sind. Auf der anderen Seite fehlen Go Generika, so dass einige Arten von Code, die in anderen Sprachen - einschließlich Python - präziser ausgedrückt werden würden, in Go ausführlicher und ausführlicher werden.

Go vs. Python: Laufzeitgeschwindigkeit

Wenn es einen Bereich gibt, in dem Go Python zweifellos schlägt, ist es die Ausführungsgeschwindigkeit. Go ist eine Größenordnung oder schneller als Python, auch ohne Optimierungen seitens des Entwicklers. Go wird direkt in nativen Maschinencode kompiliert, während die Laufzeitdynamik von Python nur schwer auf Geschwindigkeit zu optimieren ist.

Trotzdem kann Python für viele gängige Aufgaben „schnell genug“ sein. Es lohnt sich daher, eine Python-Implementierung für Ihren Anwendungsfall zu vergleichen. Viele der leistungsintensivsten Jobs, für die Python verwendet wird, werden nicht in Python selbst ausgeführt, sondern über in C oder C ++ geschriebene Bibliotheken. Darüber hinaus kann die PyPy-Laufzeit, ein Ersatz für die herkömmliche CPython-Laufzeit, erhebliche Beschleunigungen für Anwendungen mit langer Laufzeit wie Webserver bieten, selbst wenn die Dynamik von Python stark genutzt wird.

Go vs. Python: Bereitstellung

Go wurde von Anfang an so konzipiert, dass kompilierte Apps problemlos als eigenständige Binärdateien auf mehreren Plattformen bereitgestellt werden können. Im Gegensatz dazu wurde Python ursprünglich als Skriptsprache konzipiert, daher benötigen Python-Programme die Python-Laufzeit.

In Python fehlt eine native Lösung für die Bereitstellung eines Skripts als eigenständige ausführbare Datei. Sie können sich jedoch dafür an Bibliotheken von Drittanbietern wie PyInstaller wenden. Containerlösungen wie Docker erleichtern das Packen einer Python-App mit ihrer Laufzeit.

Go vs. Python: Projektmanagement

Ein weiterer Bonus, der von Anfang an in Go eingebrannt wurde: moderne Software-Projektmanagement-Techniken. Schnelle Befehlszeilenaktionen erstellen ein neues Go-Projekt-Repository und verwalten dessen Abhängigkeiten. Es ist erwähnenswert, dass Go Abhängigkeiten und reproduzierbare Builds nicht immer gut unterstützt hat, aber das in Go 1.11 eingeführte Modulsystem bietet jetzt einen gemeinsamen Mechanismus für die Arbeit mit verschiedenen Versionen von Bibliotheken.

In gewisser Weise leidet Python unter dem gegenteiligen Problem: Eine Vielzahl von Projektmanagement- und Versionierungstools führt häufig zu Verwirrung darüber, welche Tools und Methoden für einen bestimmten Job am besten geeignet sind. Auf der positiven Seite bedeutet dies auch, dass Sie nicht gezwungen sind, Dinge auf eine bestimmte Art und Weise zu tun.

Go vs. Python: Asynchrone Programmierung

Durch asynchrone Vorgänge, bei denen eine Aufgabe ausgeführt wird, während auf die Fertigstellung einer anderen gewartet wird, wird E / A-gebundener Code wie Netzwerkdienste effizienter ausgeführt.

Go hat Async von Anfang an nativ über Goroutinen unterstützt, eine Sprachsyntaxfunktion. Mit Goroutinen können Sie viele kleine Operationen nebeneinander ausführen, mit einem nativen Kommunikationsprimitiv, Kanälen, um Operationen zwischen ihnen zu synchronisieren. Go wird auch mit Werkzeugen geliefert, um den versehentlichen Missbrauch dieser Funktionen zu reduzieren. Sie können immer noch Code schreiben, der blockiert oder Rennbedingungen hat, aber es ist einfach, die häufigsten Fehler dieser Art zu erkennen.

Python hat kürzlich Unterstützung auf Sprachebene für asynchrones Verhalten mit den  async/await Schlüsselwörtern erhalten. Zuvor war in Python eine asynchrone Programmierung möglich, jedoch nicht einfach. Das bedeutet, dass die Bibliotheksunterstützung für moderne asynchrone Python-Redewendungen nicht so weit fortgeschritten ist, wie es sein könnte, da es ein Neuling in der Sprache ist. Die Unterstützung verbessert sich jedoch, da mehr Bibliotheken asynchron kompatibel werden und die nicht asynchronen Versionen von Python nicht mehr unterstützt werden.

Go vs. Python: Fehlerbehandlung und Debugging

Python und Go haben völlig unterschiedliche Philosophien für die Fehlerbehandlung.

In Python sind Fehler erstklassige Objekte, die die Aufrufkette der Anwendung weitergeben, wenn die App eine Ausnahme auslöst. Dies macht die Fehlerbehandlung optional, sodass der Programmierer entscheiden muss, welche Fälle behandelt werden sollen, und diese manuell behandeln muss. Aus dem gleichen Grund ermöglicht der Ansatz von Python auch das Schreiben flexiblerer Fehlerbehandlungsmechanismen, die nicht jede Anrufstelle überladen.

Mit Go gibt jede Funktion den Wert für die Funktion selbst sowie ein mögliches Fehlerobjekt zurück. Go-Programme enthalten normalerweise explizite Anmerkungen zu möglichen Fehlerbedingungen an Funktionsaufrufseiten, sodass Code eine eindeutige Fehlerbehandlung aufweist. Der Nachteil davon ist ausführlicher Code. Go hat auch die  panic/recoverSchlüsselwörter für den Umgang mit Extremsituationen, die es rechtfertigen, das Programm sofort zu beenden, obwohl sie natürlich nicht so häufig verwendet werden sollen wie Python-Ausnahmen. Go 2.0 verfügt möglicherweise über neue Fehlerbehandlungsmechanismen, die die Ausführlichkeit verringern, aber die Überarbeitung der Sprache ist noch weit entfernt.

Go vs. Python: Testen

Nicht jede moderne Softwareentwicklung basiert auf Unit- und Integrationstests, aber Projekte, die robuster sind. Go und Python bieten beide native Mechanismen für Unit-Tests. Für Go gibt es das native  testing Paket. Für Python gibt es das  unittest Framework. 

Go enthält Testabdeckungsmetriken als Teil von  testing; Für Python benötigen Sie ein Paket eines Drittanbieters  coverage, um zu bestimmen, wie gründlich Ihre Testsuite sein wird. Auf der anderen Seite verfügt Python über hochflexible integrierte Testoptionen, um seine Dynamik zu ergänzen. Beispielsweise verfügt es über Aussagen zur Überprüfung einer Vielzahl allgemeiner Bedingungen, einschließlich erhöhter Ausnahmen. Python verwendet auch eine Klasse, um Testcode von Anwendungscode zu unterscheiden, während Go Funktions- und Dateinamenkonventionen verwendet.

Go vs. Python: Ökosysteme

Im Laufe der Jahre haben Python und Go beeindruckende Bibliotheken mit Software von Drittanbietern zusammengestellt, die ihre Anwendungsfälle und Stärken widerspiegeln.

Python ist seit langem die bevorzugte Sprache für Skripte und Automatisierung sowie für die Erstellung von Webdiensten und die Erstellung benutzerfreundlicher Schnittstellen zwischen komplexen Systemen. In dieser letzten Kategorie dominiert Python die Datenwissenschaft und das maschinelle Lernen: Python erleichtert das Zusammenfügen der großen, komplexen Bibliotheken und Workflows, die in fortgeschrittenen Datenanalyse- und maschinellen Lernmodellen verwendet werden.

Die Erfolgsgeschichten von Go drehen sich um die asynchronen Programmierfunktionen und die systemeigene Geschwindigkeit. Webserver, Netzwerkanwendungen, CPU-gebundene Mikrodienste und Systemdienstprogramme sind hervorragende Kandidaten für Go. Der größte Teil der Software für die moderne, containergestützte Anwendungsentwicklung - einschließlich Docker und Kubernetes - ist in Go geschrieben.

Eine Möglichkeit, herauszufinden, ob Sie sich für Go oder Python entscheiden, besteht darin, festzustellen, welche darin geschriebenen Projekte Ihren aktuellen Bemühungen ähneln. Es besteht eine gute Chance, dass vieles, was Sie erstellen möchten, bereits von jemand anderem erstellt wurde. Sie können also nicht nur die Sprache auswählen, sondern auch die unterstützenden Bibliotheken, die passen.

Schließlich gibt es nichts, was besagt, dass Sie nicht sowohl in Python als auch in Go schreiben können  . Sie können Go für leistungsabhängige Teile Ihrer Anwendung verwenden und Python-Wrapper oder Frontends für Entwicklerkomfort und -komfort bereitstellen.