Go wurde als eine der einfachsten Programmiersprachen bekannt, einschließlich ihrer Vorteile - einfaches Schreiben und Lesen von Code, in den meisten Fällen einfachere Unterstützung für die Codebasis. Wir sprechen über einige Vorteile von Go, dank derer wir bei SimbirSoft es in einer Reihe hoch geladener Projekte mit verschiedenen Architekturen verwendet haben, sowohl Web-Service als auch Micro-Service (SOA).
Anwendung
Diese Systemsprache eignet sich für die meisten Netzwerkaufgaben, Mikrodienste und Makrodienste, Webdienste sowie für Systemtools. Viele DevOps-Experten lieben sie nicht ohne Grund. Go findet seine Verwendung im maschinellen Lernen, und einige Entwickler schreiben sogar Websites damit. In unserer Praxis haben wir uns an Go gewandt, als wir separate CRMs und Softwareprodukte für den internen Gebrauch entwickelt haben, beispielsweise für Versicherungsunternehmen. Das Standard-Go-Sprachrepository enthält auch ein Paket für die mobile Entwicklung. Dieses Paket wird weiterhin unterstützt, obwohl es dafür geeignetere Tools gibt.
Go: Entwicklung und Anerkennung
Bei Google begann die Entwicklung der Go-Sprache im Jahr 2007. Zuvor verwendete das Unternehmen Java, Python und C ++, hatte jedoch bestimmte Nachteile (insbesondere einen hohen Speicherverbrauch) oder eine eingeschränkte Verwendung. Dann begann Google, eine neue Sprache für ihre Bedürfnisse zu entwickeln.
Was sind die Anforderungen an die Sprache:
- Eine ausführbare Datei (keine Abhängigkeiten)
- Schnelle Kompilierung
- Schnelle Laufzeit (mindestens auf dem Niveau von Java und C ++)
- Garbage Collector minimiert Ressourcenlecks
- Optimierung für Multiprozessorsysteme
- Statische Eingabe
- Minimalismus
- Syntaktische Leichtigkeit
- Multiparadigmness (imperativ, funktional, objektorientiert)
Für diejenigen, die nicht mit Go arbeiten, erinnern Sie sich kurz an die Geschichte seiner Entstehung. Google begann 2007 mit der Ausarbeitung der Sprachspezifikation. Release 1.0 fand 2012 statt und 2015 wurde Release 1.5 bereits ohne eine einzige Zeile C ++ - Code veröffentlicht. Von diesem Moment an kompiliert sich die Sprache selbst, wodurch wir die Entwicklung einzelner Aufgaben auf Go beschleunigen konnten.
Das durchschnittliche Erkennungsalter für eine neue Sprache in der Community beträgt ungefähr 10 Jahre, aber Go ist bereits eine der beliebtesten Sprachen. Im Juni 2019 stieg Go laut
TIOBE- Index in Bezug auf die weltweite Popularität auf den 15. Platz und fügte drei Positionen pro Jahr hinzu. Zu den Gründen für den Erfolg gehören:
- Starke Standardbibliothek
- Cooles Standard-Tuning
- Die wichtigsten Funktionen werden in der „Box“ vorgestellt, und Bibliotheken werden Open Source zur Verfügung gestellt
- Sehr freundliche Gemeinschaft
Beispielsweise sind die folgenden Pakete in der Standardbibliothek enthalten (die Liste ist unvollständig):
Illustration - github.com/ashleymcnamara/gophersWenn Sie mit der Geschwindigkeit Ihrer Anwendung oder anderen Parametern nicht vertraut sind, können Sie sofort mit dem Profiler arbeiten. Dazu benötigen Sie:
- Registrieren Sie den Profiler-Import: import _ "net / http / pprof"
- Fügen Sie einen http-Server hinzu, um Ergebnisse vom Profiler zu erhalten: go http.ListenAndServe ("0.0.0.0:8080", nil)
Gehen Sie Werkzeuge
Einer der Vorteile von Go ist das umfangreiche Set an Standardwerkzeugen. Wir haben unserer Meinung nach einige der interessantesten Dienstprogramme ausgewählt (tatsächlich gibt es noch viele weitere):
- Benchcmp - Benchmark-Vergleich, Leistung vor und nach Änderungen
- go tool cover - Analyse der Codeabdeckung durch Tests
- godoc - kommentarbasierte Dokumentationsgenerierung
- goimports - Importanalyse (nicht verwendete entfernen, fehlende hinzufügen)
- Gorename - Refactoring
- Gegenwart - Präsentation Tuning
- go vet - häufig auftretender Fehler linter
- go test - Führen Sie Tests und Benchmarks durch
- go fix - Änderungen beim Ändern der API korrigieren (vor Release 1.0)
- go tool pprof - profiling
- Gehen Sie fmt - Code-Formatierung nach Codestil
- Race Detector - Finden eines Datenrennens zur Laufzeit
Wettbewerbsfähigkeit
Eine weitere Stärke von Go ist, dass es einfach ist, wettbewerbsfähigen Code in dieser Sprache zu schreiben. Dazu verwenden Sie einfach Schlüsselwörter, bevor Sie die Funktion aufrufen.

Geh zum Training
Wenn Sie auf Go programmieren möchten, dauert der Start relativ wenig Zeit. Die Entwickler - Core Team - unterstützen den A Tour of Go-Kurs in mehreren Sprachen, einschließlich Russisch. Dieser Kurs kann in nur 1-3 Tagen abgeschlossen werden. In Bezug auf das Lernen ist Go eine der einfachsten Sprachen.
Also was zu lesen:
ORM in Go
Es wird angenommen, dass eine der Schwächen von Go ORM ist. Vielleicht liegt dies teilweise daran, dass die Sprache jung ist - darin beginnen sich gerade viele notwendige Werkzeuge zu entwickeln. Insbesondere können Sie das Datenbank- / SQL-Paket verwenden, um mit Datenbanken zu arbeiten. Was sind die Anforderungen für das Paket:
- Allgemeines Paket für alle SQL-Datenbanken
- Portable: Enthält keine Funktionen im Bereich der Arbeit mit Datenbanken. Im Idealfall sollte alles korrekt funktionieren, wenn Sie den Treiber wechseln.
- Konvertieren von Go-Typen in Standard-Datenbanktypen (es sollte möglich sein, bestimmte Typen zu verarbeiten)
- Enthält den Verbindungspool
- Gewindesicherheit für Goroutinen
Beispiel für eine SELECT-Abfrage mit database / sql
defer rows.Close() for rows.Next() { var message string err := rows.Scan(&message) if err != nil { log.Panic(err) } fmt.Println(message) } if err := rows.Err(); err != nil { log.Panic(err) }
Wie Sie dem Beispiel entnehmen können, müssen jedes Mal viele Vorlagenaktionen ausgeführt werden. Zum Beispiel:
- Zeilenobjekt schließen: Zeilen verschieben.Close ()
- auf Fehler prüfen err: = rows.Err (); err! = nil da Es ist nicht klar, warum rows.Next () uns false zurückgegeben hat
Von all dem möchte ich etwas Universelleres und Einfacheres verwenden, zum Beispiel ORM.
Arten von ORM-Implementierungen
Wenn Entwickler vor der Wahl von ORM für die Arbeit mit Go stehen, werden sie häufig von der Bewertung auf dem Github geleitet. Als wir uns für ORM entschieden haben, hatte Beego die beste Bewertung (18.000 „Sterne“). In der Praxis ist ORM jedoch Teil des Frameworks, sodass die Bewertung nicht ganz objektiv ist (wenn Sie nur ORM auswählen). Auch unter den Führungskräften unterstützt Gorm, das sich seit 2013 entwickelt, Transaktionen und hat viele andere Vorteile.

Wie unsere Erfahrung mit Gorm gezeigt hat, sind jedoch bestimmte Probleme bei der Verwendung möglich, insbesondere beim Testen: z. B. Datenrennen oder Löschen eines Fremdschlüssels. Wir können die folgenden Ursachen für solche Fehler in Gorm annehmen:
- Commits sofort im Master
- Fehlende Tags
- Unvorhersehbarer SQL Builder
Momentan bevorzugen wir in unserer Arbeit mehrere ORMs, die keine Schnittstelle {} verwenden - dies sind Kallax, Reform und Sqlboiler. Normalerweise verwenden wir das
Golang- Paket für Migrationen und das
Orm-Bench- Repository mit ORM-Benchmarks für
unterwegs . Gleichzeitig sollten Sie nicht nur Benchmarks verfolgen. In den meisten Fällen ist die Geschwindigkeit nicht so wichtig wie die Qualität des Codes und seine Funktionalität.
Zusammenfassend
Zu den Vorteilen der Go-Sprache für Entwickler und Unternehmen zählen eine höhere Entwicklungsproduktivität, die Möglichkeit, weniger Server zu verwenden, die syntaktische Einfachheit und die schnellere Schulungszeit für neue Entwickler, eine große Anzahl von Tools und eine freundliche Community. Trotz der Tatsache, dass es sich um eine junge Sprache handelt, wächst und entwickelt sie sich ständig weiter. Die Funktionen von Go machen es zur optimalen Sprache für eine Vielzahl von Projekten, von Netzwerkaufgaben über Microservices bis hin zu Blockchain.
Der Artikel wurde auf der Grundlage unseres Berichts beim Hot Backend- Treffen in Samara erstellt.