Von einem Übersetzer: übersetzt für Sie einen Artikel von Ilad Leev über den Übergang von Python zu Go . Der Artikel wird nicht nur für unerfahrene Programmierer nützlich sein, sondern auch für alle, die sich auf die eine oder andere Weise für Go interessieren.Ich mag Python. Diese Sprache ist seit fünf Jahren mein Favorit. Er ist freundlich, effizient und leicht zu lernen. Wird für fast alles verwendet: von der Erstellung einfacher Skripte und der Webentwicklung über die Datenvisualisierung bis hin zum maschinellen Lernen
Die allmähliche „Reifung“ von Go, die große Community und die Tatsache, dass immer mehr Unternehmen diese Sprache nach erfolgreichen Tests übernehmen, haben mich dazu gebracht, darauf zu achten und mich mit der Literatur zu beschäftigen.
In diesem Beitrag geht es jedoch nicht darum, was besser ist - Python oder Go : Es gibt viele Vergleiche im Internet. Meiner Meinung nach hängt alles von der Anwendung ab. Ich werde darüber sprechen, warum ich mich für Go entschieden habe, und einige Tipps und Links zu nützlichen Ressourcen für alle Interessierten geben.
Skillbox empfiehlt: Ein Python-Entwickler von Grund auf .
Wir erinnern Sie daran: Für alle Leser von „Habr“ - ein Rabatt von 10.000 Rubel bei der Anmeldung für einen Skillbox-Kurs mit dem Promo-Code „Habr“.

Beobachtungen
Das erste, was ich zu Beginn der Reise tat, war, das ausgezeichnete offizielle
Tour Of Go- Tutorial zu studieren. Es gibt ein Verständnis für die Syntax der Sprache.
Um mein Wissen zu verbessern, las ich auch das Buch „
Go for Python Programmers “, in dem ich mit der nächsten Stufe fortfahren konnte - Versuch und Irrtum.
Ich habe die üblichen Funktionen, die ich in Python verwendet habe (JSON serialisieren oder mit HTTP-Aufrufen arbeiten), verwendet und versucht, sie in Go zu schreiben. Dank eines solchen visuellen Vergleichs konnte ich wichtige Unterschiede zwischen den Sprachen identifizieren.
ProjektlayoutErstens benötigt Python keine bestimmte Verzeichnishierarchie, während Go dies tut.
Go verwendet ein „Standard“ -Layout, das etwas komplizierter ist und mehr Arbeit erfordert. Auf der anderen Seite erhalten wir als Ergebnis eine gut strukturierte Codebasis, die eine modulare Struktur verwendet, und beim Erweitern des Projekts bleibt der Code streng geordnet.
Das offizielle Tutorial
zum Schreiben von Go-Code erklärt, wie Sie Ihre Arbeit organisieren.
Statische starke TypisierungGo ist statisch typisiert, und Sie werden sich für diejenigen ratlos fühlen, die es gewohnt sind, Sprachen wie Python und Ruby dynamisch zu tippen.
Es besteht kein Zweifel, dass dynamische Sprachen anfälliger für Fehler sind. Der Entwickler benötigt mehr Aufwand bei der Überprüfung der Eingabedaten. Ein Beispiel ist eine Funktion, die die Summe zweier Ganzzahlen berechnet. Wenn Sie eine Zeichenfolge an eine Funktion übergeben (was nicht so selten ist), führt dies zu einem TypeError-Fehler.
In Go kann dies nicht passieren, da Sie hier für jede Variable und Funktion einen Typ deklarieren müssen und welchen Variablentyp die Funktion zurückgeben wird.
Zuerst war es ärgerlich: Es schien mir, dass diese Go-Funktion langsamer wurde, aber dann wurde mir klar, dass das Deklarieren von allem tatsächlich Zeit spart und die Wahrscheinlichkeit eines Fehlers verringert.
Native ParallelitätGo bietet native Parallelitätsunterstützung mithilfe von Routinen und Pipes - dies ist praktisch.
Das Konzept der Kanäle wirkt zunächst etwas verwirrend. Mit der Zeit wird es jedoch verständlicher und Sie genießen neue Möglichkeiten, indem Sie aktiv mit ihnen arbeiten.
Hier ist eine Visualisierung von allem, was
Ivan Danilyuk gesagt
hat .
package main func main() {

Weitere Beispiele
hier und
hier .
Arbeiten Sie mit JSONNun, json.loads () ist nicht mehr. In Python ist alles einfach: Wir verwenden json.loads und es gibt keine Probleme.
In Go, einer statisch typisierten Sprache, wird diese Operation jedoch komplizierter.
Hier ist bei Verwendung von JSON alles vordefiniert. Jedes Feld, das nicht in die angegebene Struktur passt, wird ignoriert. Das ist gut so. Dies kann als ein im Voraus vereinbartes Protokoll zwischen den beiden Parteien angesehen werden. Die Daten, die Sie in JSON erhalten haben, müssen erwartet werden, und die Felder und JSON-Typen werden von beiden Parteien „vereinbart“.
{ “first”: “Elad”, “last”: “Leev”, “location”:”IL”, “id”: “93” }
type AccountData struct { First string `json:"first"` Last string `json:"last"` Location string `json:"location"` ID string `json:"id"` }
Natürlich können Sie JSON ohne Strukturen deserialisieren, aber wann immer möglich sollte dies vermieden und die statische Natur der Sprache berücksichtigt werden.
Die JSON-Dekodierung auf GO wird am besten
in diesem Beitrag oder
hier erklärt .
Faul, Ihren JSON in eine Go-Struktur umzuwandeln? Kein Problem,
dieses Tool erledigt alles für Sie .
Code bereinigenDer Go-Compiler versucht immer, Ihren Code sauber zu halten. Nicht verwendete Variablen werden als Kompilierungsfehler betrachtet. Go verwendet einen einzigartigen Ansatz, mit dem das System die meisten Formatierungsprobleme lösen kann. Daher führt Go das Programm gofmt beim Speichern oder Kompilieren aus und korrigiert die Formatierung unabhängig voneinander.
Interessieren Sie sich für Variablen? Okay Verwenden Sie einfach _ (Unterstrich) und weisen Sie es einer leeren ID zu.
Das Mastrid-Tutorial für diesen Teil der Arbeit mit der Sprache sind die Informationen aus „
Effective Go “.
Die richtige Bibliothek und das richtige Framework findenIch habe mit Python Frameworks und Bibliotheken wie Flask, Jinja2, Requests und sogar Kazoo mit Python verwendet, daher hatte ich Angst, dass ich nichts Passendes für Go finden würde.
Aber die Community hat diese Probleme bereits gelöst: Die Sprache verfügt über eigene Bibliotheken, mit denen Sie völlig vergessen können, was Sie zuvor verwendet haben.
Hier sind meine Favoriten.
Python-Anfragen => net / httpnet / http bietet eine bequeme und benutzerfreundliche Implementierung des HTTP-Clients und -Servers.
Flasche + Jinja2 => GinGin ist ein HTTP-Webframework mit einer sehr einfachen API: Pfadparameter, herunterladbare Dateien, Gruppenrouting (/ api / v1, / api / v2), benutzerdefinierte Protokollformate für statische Dateien, HTML-Rendering und eine wirklich leistungsstarke benutzerdefinierte Middleware.
Bewerten Sie
diesen Benchmark.
CLI-Erstellung => CobraCobra ist eine Bibliothek zum Erstellen leistungsfähiger CLI-Anwendungen sowie ein Programm zum Generieren von Anwendungen und Batchdateien.
Cobra wird in vielen großen Go-Projekten verwendet, einschließlich Kubernetes usw. und OpenShift.
Hier sind einige weitere Bibliotheken, die ich sehr empfehlen kann:
Viper ,
Gonfig und diese fantastische Liste ist
Awesome-Go .
Andere nützliche Ressourcen
[1]
Francesc Campoy - Du musst diesen
YouTube-Kanal und das
GitHub-Profil unbedingt bewerten.
[2]
GopherCon - Video .
[3]
Web-Beispiele .
[4]
Golang Weekly ,
Gopher Academy ,
Golang News - Twitter-Konten.
Zusammenfassend
Als regulärer Python-Benutzer seit fünf Jahren hatte ich Angst, dass es schmerzhaft sein würde, nach Go zu gehen.
Aber nein: Es gibt die Grundlagen der Go-Community, die die Fähigkeiten der Sprache erweitert und ergänzt, sowie verschiedene nützliche Ressourcen, die Ihnen beim Übergang helfen.
Go wächst schnell und ich hoffe, dass Google es zur Hauptsprache für das Schreiben von Cloud-Anwendungen und -Infrastrukturen machen kann.
Jetzt mitmachen!

Skillbox empfiehlt: