Mein Weg von Python zu Go — Tipps und Ressourcen teilen

Mein Weg von Python zu Go — Tipps und Ressourcen teilen

Vom Übersetzer: übersetzt für Sie den Artikel von Ilad Leev über den Umstieg von Python auf Go. Der Artikel ist nicht nur für Anfänger in der Programmierung nützlich, sondern auch für alle, die sich in irgendeiner Weise für Go interessieren.

Ich mag Python. Diese Sprache war in den letzten fünf Jahren mein Favorit. Sie ist benutzerfreundlich, effizient und leicht zu lernen. Sie wird für so gut wie alles verwendet: von der Erstellung einfacher Skripte und Webentwicklung bis hin zu Datenvisualisierung und maschinellem Lernen.

Die schrittweise "Reifung" von Go, die umfangreiche Community und die Tatsache, dass immer mehr Unternehmen diese Sprache nach erfolgreichen Tests annehmen, haben mich dazu gebracht, sie zu beachten und mich intensiver mit der Literatur auseinanderzusetzen. Aber dieser Beitrag ist nicht dazu da, um zu entscheiden, was besser ist – Python oder Go: es gibt unzählige Vergleiche im Internet. Meiner Meinung nach hängt alles vom Anwendungsbereich ab. Ich werde darüber sprechen, warum ich mich für Go entschieden habe, und einige Tipps sowie Links zu nützlichen Ressourcen für alle Interessierten bereitstellen.

Skillbox empfiehlt: Praktischer Kurs Python-Entwickler von Grund auf.

Wir erinnern daran: alle Leser von „Habr“ erhalten einen Rabatt von 10.000 Rubel bei der Anmeldung zu einem beliebigen Kurs von Skillbox mit dem Aktionscode „Habr“.

Mein Weg von Python zu Go — Tipps und Ressourcen teilen

Beobachtungen

Das erste, was ich zu Beginn meines Weges gemacht habe, war, das hervorragende offizielle Tutorial “Tour Of Go” zu studieren. Es vermittelt ein Verständnis für die Syntax der Sprache.

Um mein Wissen zu vertiefen, habe ich zusätzlich das Buch “Wählen Sie Python-Entwickler aus”, die den nächsten Schritt – das Experimentieren – ermöglicht hat.

Ich habe die vertrauten Funktionen, die ich in Python genutzt habe (JSON-Serialisierung oder HTTP-Aufrufe), genommen und versucht, sie in Go zu implementieren. Durch diesen anschaulichen Vergleich konnte ich die wesentlichen Unterschiede zwischen den Sprachen herausarbeiten.

Projektaufbau

Zunächst einmal erfordert Python keine spezifische Verzeichnisstruktur, während Go dies tut.

Go nutzt eine „standardisierte“ Struktur, die etwas komplexer ist und mehr Aufwand erfordert. Im Gegenzug erhalten wir jedoch eine gut strukturierte Codebasis, in der eine modulare Struktur verwendet wird, und bei Erweiterungen des Projekts bleibt der Code gut organisiert.

Das offizielle Tutorial “Wie man Go-Code schreibt” erklärt, wie Sie Ihre Arbeit organisieren können.

Statische strikte Typisierung

Go ist statisch typisiert, was diejenigen, die an dynamisch typisierte Sprachen wie Python und Ruby gewöhnt sind, nicht gerade wohlfühlen lassen wird.

Es besteht kein Zweifel, dass dynamische Sprachen anfälliger für Fehler sind. Die Entwickler müssen mehr Aufwand in die Validierung von Eingabedaten investieren. Ein Beispiel ist eine Funktion, die die Summe zweier Ganzzahlen berechnet. Wenn man der Funktion einen String übergibt (was nicht ganz so selten passiert), führt das zu einem TypeError.

In Go kann so etwas nicht passieren, da hier der Typ für jede Variable und Funktion deklariert werden muss, sowie der Typ, den die Funktion zurückgibt.

Zunächst nervt das: ich hatte das Gefühl, dass diese Eigenschaft von Go die Leistung verlangsamt – aber dann wurde mir klar, dass die Deklaration tatsächlich Zeit spart und die Wahrscheinlichkeit von Fehlern verringert.

Nativ unterstützter Parallelenbetrieb

Go bietet native Unterstützung für Parallelität mit Goroutinen und Kanälen – das ist praktisch.

Das Konzept der Kanäle scheint anfangs etwas verwirrend. Mit der Zeit wird es jedoch klarer, und man beginnt, die neuen Möglichkeiten aktiv zu nutzen und zu genießen.

Hier ist eine Visualisierung all dessen von Iwan Daniliuk.

package main
 
func main() {
    // neuen Channel vom Typ int erstellen
    ch := make(chan int)
 
    // neue anonyme Goroutine starten
    go func() {
        // 42 an den Channel senden
        ch <- 42
    }()
    // vom Channel lesen
    <-ch
}

Mein Weg von Python zu Go — Tipps und Ressourcen teilen

Mehr Beispiele hier und hier.

Arbeiten mit JSON

Nun, json.loads() ist nicht mehr notwendig. In Python ist alles einfach: wir verwenden json.loads, und es gibt keine Probleme.

Aber in Go, einer statisch typisierten Sprache, wird diese Operation komplizierter.

Hier ist bei der Verwendung von JSON alles im Voraus definiert. Jedes Feld, das nicht in die gegebene Struktur passt, wird ignoriert, und das ist gut. Man kann dies als ein voraus vereinbartes Protokoll zwischen zwei Parteien ansehen. Die Daten, die Sie im JSON erhalten, sollten erwartbar sein, und die JSON-Felder und -Typen sind von beiden Seiten "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 wo immer möglich, sollte dies vermieden werden, um die statische Natur der Sprache zu berücksichtigen.

Das Dekodieren von JSON in GO wird am besten in diesem Beitrag erklärt oder hier.

Sind Sie faul dabei, Ihr JSON in Go-Strukturen zu konvertieren? Kein Problem, dieses Tool erledigt alles für Sie.

Sauberer Code

Der Go-Compiler bemüht sich stets, Ihren Code "sauber" zu halten. Er betrachtet ungenutzte Variablen als einen Kompilierungsfehler. Go verwendet einen einzigartigen Ansatz, der es dem System ermöglicht, die meisten Formatierungsprobleme selbst zu lösen. So wird Go beim Speichern oder Kompilieren automatisch das Programm gofmt ausführen und das Formatting eigenständig anpassen.

Kümmert Sie sich nicht um Variablen? Kein Problem! Verwenden Sie einfach _ (Unterstrich) und weisen Sie ihn einer leeren Identität zu.

Ein hilfreiches Tutorial für diesen Teil der Arbeit mit der Sprache ist die Information aus “Effective Go”.

Suche nach geeigneten Bibliotheken und Frameworks

Ich habe mit Python Frameworks und Bibliotheken wie Flask, Jinja2, Requests und sogar Kazoo gearbeitet, deshalb hatte ich Bedenken, keine passenden Lösungen für Go zu finden.

Aber die Community hat diese Probleme bereits gelöst: Die Sprache verfügt über eigene einzigartige Bibliotheken, die es ermöglichen, ganz zu vergessen, was Sie zuvor verwendet haben.

Hier sind meine Favoriten.

Python Requests => net/http

net/http bietet eine benutzerfreundliche und einfach zu verwendende Implementierung von HTTP-Client und -Server.

Flask + Jinja2 => Gin

Gin — ein HTTP-Web-Framework mit einer sehr einfachen API: Pfadparametern, hochladbaren Dateien, Gruppen-Routing (/ api / v1, / api / v2), benutzerdefinierten Protokollformaten, static file serving, HTML-Rendering und wirklich leistungsfähigem benutzerdefiniertem Middleware.
Bewertung diese Benchmark.

CLI-Erstellung => Cobra

Cobra — eine Bibliothek zur Erstellung leistungsstarker CLI-Anwendungen sowie ein Programm zur Generierung von Anwendungen und Befehlsdateien.
Cobra wird in vielen großen Go-Projekten eingesetzt, einschließlich Kubernetes, etcd und OpenShift.

Hier sind noch einige Bibliotheken, die ich sehr empfehle: Viper, Gonfig und diese großartige Liste — Awesome-Go.

Weitere nützliche Ressourcen

[1] Francesc Campoy  —  diese sollten Sie auf jeden Fall bewerten YouTube-Kanal und GitHub-Profil.

[2] GopherCon — Videos.

[3] Go-Web-Beispiele.

[4] Golang Weekly, Gopher Academy, Golang News — Twitter-Accounts.

Zusammenfassung

Als langjähriger Python-Nutzer hatte ich Angst, dass der Umstieg auf Go schmerzhaft wäre.

Aber dem ist nicht so: Es gibt Community-Entwicklungen in Go, die die Möglichkeiten der Sprache erweitern, sowie verschiedene nützliche Ressourcen, die auch Ihnen beim Umstieg helfen können.

Go entwickelt sich schnell weiter, und ich hoffe, dass Google es zur führenden Sprache für die Entwicklung von Cloud-Anwendungen und Infrastruktur machen kann.

Treten Sie bei!

Mein Weg von Python zu Go — Tipps und Ressourcen teilen

Skillbox empfiehlt:

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster