
Vom Ăbersetzer: ĂŒbersetzt . 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 .
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 meines Weges gemacht habe, war, das hervorragende offizielle Tutorial ââ zu studieren. Es vermittelt ein VerstĂ€ndnis fĂŒr die Syntax der Sprache.
Um mein Wissen zu vertiefen, habe ich zusĂ€tzlich das Buch ââ, 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 ââ 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 .
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
} 
Mehr Beispiele und .
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 oder .
Sind Sie faul dabei, Ihr JSON in Go-Strukturen zu konvertieren? Kein Problem, .
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 ââ.
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
bietet eine benutzerfreundliche und einfach zu verwendende Implementierung von HTTP-Client und -Server.
Flask + Jinja2 => 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 Benchmark.
CLI-Erstellung => 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: , und diese groĂartige Liste â .
Weitere nĂŒtzliche Ressourcen
[1] ââ âdiese sollten Sie auf jeden Fall bewerten und .
[2] .
[3] .
[4] , , â 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!

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