Mein Weg von Python zu Go – ich teile Tipps und Ressourcen

Mein Weg von Python zu Go – ich teile Tipps und Ressourcen

Von dem Übersetzer: auf parallele AusfĂŒhrung umgestellt. Dennoch betraf diese Änderung nur einen kleinen Teil der Last, da die Hauptarbeit auf den Benutzerdaten lastet. fĂŒr Sie der Artikel von Ilad Leev ĂŒber den Wechsel von Python zu Go. Der Artikel ist nicht nur fĂŒr angehende Programmierer nĂŒtzlich, sondern 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 erlernen. Sie wird praktisch fĂŒr alles verwendet: von der Erstellung einfacher Skripte und Webentwicklung bis hin zur 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, darauf zu achten und mich in die Literatur zu vertiefen. Aber dieser Beitrag handelt nicht davon, was besser ist – Python oder Go:Es gibt eine Menge Vergleiche im Internet. Meiner Meinung nach hĂ€ngt es vom Anwendungsbereich ab. Ich möchte erzĂ€hlen, warum ich Go gewĂ€hlt habe, und dabei einige RatschlĂ€ge und Links zu nĂŒtzlichen Ressourcen fĂŒr alle Interessierten auf dem Gebiet geben.

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 – ich teile Tipps und Ressourcen

Beobachtungen

Das Erste, was ich zu Beginn meiner Reise getan habe, war, das großartige offizielle Tutorial “Tour Of Go” zu studieren. Es vermittelt ein VerstĂ€ndnis fĂŒr die Syntax der Sprache.

Um meine Kenntnisse zu vertiefen, habe ich auch das Buch “Go for Python Programmers” gelesen, das mir den Einstieg in die nĂ€chste Phase – das Ausprobieren und Fehler machen – erleichtert hat.

Ich habe gÀngige Funktionen, die ich in Python verwendet habe (JSON-Serialisierung oder Arbeiten mit HTTP-Anfragen), genommen und versucht, sie in Go zu schreiben. Durch diesen anschaulichen Vergleich konnte ich die wesentlichen Unterschiede zwischen den Sprachen herausfinden.

Projektorganisation

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

Go verwendet eine „Standard“-Organisation, die etwas komplexer ist und mehr Arbeit erfordert. Auf der anderen Seite erhalten wir dadurch eine gut strukturierte Codebasis, in der eine modulare Struktur angewendet wird, und wenn das Projekt erweitert wird, bleibt der Code strikt geordnet.

Das offizielle Tutorial “How to Write Go Code” erklĂ€rt, wie man seine Arbeit organisiert.

Statische strenge Typisierung

Go ist statisch typisiert, und das wird diejenigen, die an dynamisch typisierten Sprachen wie Python und Ruby gewöhnt sind, möglicherweise verunsichern.

Es besteht kein Zweifel, dass dynamische Sprachen anfĂ€lliger fĂŒr Fehler sind; die Entwickler mĂŒssen mehr Aufwand in die ÜberprĂŒfung von Eingabedaten investieren. Zum Beispiel: eine Funktion, die die Summe von zwei Ganzzahlen berechnet. Wenn man der Funktion einen String ĂŒbergibt (was nicht allzu selten vorkommt), fĂŒhrt dies zu einem TypeError.

In Go kann das nicht passieren, da hier der Typ fĂŒr jede Variable und Funktion deklariert werden muss und auch, welchen Typ die Funktion zurĂŒckgibt.

Zuerst ist es Ă€rgerlich: Ich hatte das GefĂŒhl, dass dieses Merkmal von Go die Arbeit verlangsamt, aber dann kam das VerstĂ€ndnis, dass die Gesamtdeklaration tatsĂ€chlich Zeit spart und die Fehlerwahrscheinlichkeit verringert.

Nativ unterstĂŒtzte ParallelitĂ€t

Go bietet native UnterstĂŒtzung fĂŒr ParallelitĂ€t mit Goroutinen und KanĂ€len – das ist praktisch.

Das Konzept der KanĂ€le scheint zunĂ€chst etwas verwirrend. Mit der Zeit wird es jedoch verstĂ€ndlicher, und man beginnt, neue Möglichkeiten zu genießen, wĂ€hrend man aktiv damit arbeitet.

Hier ist eine Visualisierung des Gesagten von Iwan Danilyuk.

package main

func main() {
    // neuen Kanal vom Typ int erstellen
    ch := make(chan int)

    // neue anonyme Goroutine starten
    go func() {
        // 42 an den Kanal senden
        ch <- 42
    }()
    // vom Kanal lesen
    <-ch
}

Mein Weg von Python zu Go – ich teile Tipps und Ressourcen

Mehr Beispiele hier und hier.

Arbeiten mit JSON

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

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

Hier ist beim Arbeiten mit JSON alles vorab definiert. Jedes Feld, das nicht in die gegebene Struktur passt, wird ignoriert, und das ist gut. Man kann darĂŒber denken wie ĂŒber ein vorher abgestimmtes Protokoll zwischen zwei Parteien. Die Daten, die man im JSON erhĂ€lt, sollten erwartet werden, und die Felder und Typen des JSON 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 kann man JSON auch ohne Strukturen deserialisieren, aber das sollte, wenn möglich, vermieden werden, um die statische Natur der Sprache zu berĂŒcksichtigen.

Die Dekodierung von JSON in GO wird am besten in diesem Beitrag erklÀrt oder hier.

Haben Sie keine Lust, Ihr JSON in eine Go-Struktur zu konvertieren? Kein Problem, dieses Tool erledigt alles fĂŒr Sie.

Sauberer Code

Der Go-Compiler wird immer versuchen, Ihren Code „sauber“ zu halten. Er betrachtet nicht verwendete Variablen als Kompilierungsfehler. Go verwendet einen einzigartigen Ansatz, der es dem System ermöglicht, die meisten Formatierungsprobleme zu lösen. So wird Go das Programm gofmt beim Speichern oder Kompilieren ausfĂŒhren und das Format automatisch korrigieren.

KĂŒmmert Sie nichts um Variablen? Kein Problem! Verwenden Sie einfach _ (Unterstrich) und weisen Sie ihn einer leeren Kennung zu.

Der Masterclass-Tutorial fĂŒr diesen Teil der Arbeiten mit der Sprache ist die Information aus “Effective Go”.

Die Suche nach geeigneten Bibliotheken und Frameworks

Ich habe mit Python Frameworks und Bibliotheken wie Flask, Jinja2, Requests und sogar Kazoo verwendet, daher hatte ich Angst, dass ich nichts Passendes fĂŒr Go finde.

Aber die Community hat diese Probleme bereits gelöst: Die Sprache hat ihre eigenen einzigartigen Bibliotheken, die es Ihnen ermöglichen, vollstÀndig zu vergessen, was Sie zuvor verwendet haben.

Hier sind meine Favoriten.

Python Requests => net/http

net/http stellt eine bequeme und benutzerfreundliche Implementierung eines HTTP-Clients und -Servers bereit.

Flask + Jinja2 => Gin

Gin ist ein HTTP-Web-Framework mit einer sehr einfachen API: Parameter im Pfad, Datei-Uploads, Gruppenrouting (/api/v1, /api/v2), benutzerdefinierte Protokollformate, statische Dateiserver, HTML-Rendering und wirklich leistungsstarkes benutzerdefiniertes Middleware.
Bewerten Sie diesen Benchmark.

CLI-Erstellung => Cobra

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

Hier sind einige weitere Bibliotheken, die ich dringend empfehle: Viper, Gonfig und diese erstaunliche Liste — Awesome-Go.

Weitere nĂŒtzliche Ressourcen

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

[2] GopherCon — Videos.

[3] Go Web Beispiele.

[4] Golang WochenrĂŒckblick, Gopher Akademie, Golang Nachrichten — Twitter-Konten.

Zusammenfassung

Nachdem ich fĂŒnf Jahre lang ein aktiver Python-Nutzer war, hatte ich Angst, dass der Übergang zu Go schmerzhaft sein wĂŒrde.

Aber das ist nicht der Fall: Es gibt eine Menge an Go-Community-Arbeiten, die die Möglichkeiten der Sprache erweitern und ergĂ€nzen, sowie verschiedene nĂŒtzliche Ressourcen, die Ihnen den Übergang erleichtern.

Go entwickelt sich schnell weiter und ich hoffe, dass Google es schaffen kann, es zur Hauptsprache fĂŒr die Entwicklung von Cloud-Anwendungen und Infrastruktur zu machen.

Nehmt teil!

Mein Weg von Python zu Go – ich teile Tipps und Ressourcen

Skillbox empfiehlt:

Quelle: habr.com

60GB SSD 8Gb DDR4