
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. . 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 .
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â.

Beobachtungen
Das Erste, was ich zu Beginn meiner Reise getan habe, war, das groĂartige offizielle Tutorial ââ zu studieren. Es vermittelt ein VerstĂ€ndnis fĂŒr die Syntax der Sprache.
Um meine Kenntnisse zu vertiefen, habe ich auch das Buch ââ 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 ââ 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 .
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
} 
Mehr Beispiele und .
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 oder .
Haben Sie keine Lust, Ihr JSON in eine Go-Struktur zu konvertieren? Kein Problem, .
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 ââ.
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
stellt eine bequeme und benutzerfreundliche Implementierung eines HTTP-Clients und -Servers bereit.
Flask + Jinja2 => 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 Benchmark.
CLI-Erstellung => 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: , und diese erstaunliche Liste â .
Weitere nĂŒtzliche Ressourcen
[1] ââ âSie sollten diese unbedingt bewerten. und .
[2] .
[3] .
[4] , , â 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!

Skillbox empfiehlt:
- ZweijÀhriger praktischer Kurs .
- Online-Kurs .
- Praktischer Jahreskurs .
Quelle: habr.com
