Heim > Artikel > Backend-Entwicklung > Über die Vor- und Nachteile der Programmierung in der Go-Sprache
Die folgende Kolumne des Golang-Tutorials stellt Ihnen die Vor- und Nachteile der Programmierung in der Go-Sprache vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird!
Kürzlich haben wir eine API mit Go geschrieben, einer Open-Source-Programmiersprache, die 2009 von Google eingeführt wurde. Durch den Einsatz von Go für die Entwicklung haben wir viele Erfahrungen und Erkenntnisse gesammelt und wollten diese mit den Lesern teilen, deshalb ist dieser Artikel entstanden.
Bei der Auswahl einer Programmiersprache für ein Projekt empfehlen wir immer, zu verstehen, in was das Projekt eingebaut werden soll, bevor man darüber nachdenkt, welche Programmiersprache man zum Erstellen verwenden soll. Lassen Sie das Produkt den entscheidenden Faktor dafür sein, wie es gebaut werden soll.
Hier sind einige Vor- und Nachteile, die wir bei der Entwicklung in Go festgestellt haben und die Ihnen helfen können zu verstehen, ob Go die richtige Sprache für die Erstellung Ihres nächsten Projekts ist.
Die Verwendung der Go-Sprache hat in den letzten Jahren explosionsartig zugenommen. Es scheint, als ob jedes Startup es für Backend-Systeme verwendet. Entwickler glauben, dass es viele Gründe dafür gibt, warum es so beliebt ist.
Go-Sprache ist sehr schnell
Go-Sprache ist eine sehr schnelle Programmiersprache. Da die Go-Sprache in Maschinencode kompiliert wird, ist ihre Leistung natürlich besser als die der Programmiersprachen, die interpretiert werden oder über virtuelle Laufzeiten verfügen. Go-Programme kompilieren außerdem sehr schnell und die resultierenden Binärdateien sind sehr klein. Unsere API lässt sich in nur wenigen Sekunden kompilieren und die resultierende ausführbare Datei ist nur 11,5 MB groß.
Einfach zu beherrschen
Im Vergleich zu anderen Sprachen ist die Syntax der Go-Sprache sehr einfach und leicht zu erlernen. Sie können den Großteil der Go-Syntax im Kopf behalten, was bedeutet, dass Sie nicht viel Zeit damit verbringen müssen, Dinge nachzuschlagen. Die Go-Sprache ist außerdem sehr sauber und leicht zu lesen. Nicht-Go-Programmierer, insbesondere diejenigen, die mit der Syntax im C-Stil vertraut sind, können Go-Code lesen und verstehen, was vor sich geht.
Statische Typdefinitionssprache
Go-Sprache ist eine leistungsstarke statische Typdefinitionssprache. Es gibt Grundtypen wie int, byte und string. Es gibt auch Strukturtypen. Wie bei jeder stark typisierten Sprache ermöglicht das Typsystem dem Compiler, Fehler klassenübergreifend zu erkennen. Die Go-Sprache verfügt außerdem über integrierte Listen- und Kartentypen, die ebenfalls einfach zu verwenden sind.
Schnittstellentypen
Die Go-Sprache verfügt über Schnittstellentypen, und jede Struktur kann die Schnittstelle einfach durch Implementierung der Schnittstellenmethode erfüllen. Dadurch können Sie Abhängigkeiten in Ihrem Code entkoppeln. Anschließend können Sie Ihre Abhängigkeiten in Ihren Tests verspotten. Durch die Verwendung von Schnittstellen können Sie modulareren, testbareren Code schreiben. Die Go-Sprache verfügt außerdem über erstklassige Funktionen, die es Entwicklern ermöglichen, Code auf praktischere Weise zu schreiben.
Standardbibliothek
Die Go-Sprache verfügt über eine ziemlich gute Standardbibliothek. Es bietet praktische integrierte Funktionen für die Arbeit mit Basistypen. Es gibt Pakete, mit denen Sie auf einfache Weise einen Webserver erstellen, I/O verarbeiten, Verschlüsselungstechniken verwenden und Rohbytes bearbeiten können. Die von der Standardbibliothek bereitgestellte JSON-Serialisierung und -Deserialisierung ist sehr einfach. Durch die Verwendung von „Tags“ können Sie JSON-Feldnamen neben Strukturfeldern angeben.
Testunterstützung
Testunterstützung ist in die Standardbibliothek integriert und erfordert keine zusätzlichen Abhängigkeiten. Wenn Sie eine Datei namens thing.go haben, schreiben Sie Ihre Tests in eine andere Datei namens thing_test.go und führen Sie „go test“ aus. Go führt diese Tests schnell aus.
Statische Analysetools
Go-Sprache verfügt über viele und leistungsstarke statische Analysetools. Ein besonderes Tool ist gofmt, das Code entsprechend dem von Go vorgeschlagenen Stil formatiert. Dies normalisiert viele Meinungen zum Projekt und ermöglicht es Teammanagern, sich auf die durch den Code geleistete Arbeit zu konzentrieren. Wir führen bei jedem Build gofmt, golint und vet aus, und wenn Warnungen gefunden werden, schlägt der Build fehl.
Garbage Collection
Bei der Entwicklung der Go-Sprache wurde die Speicherverwaltung absichtlich so gestaltet, dass sie einfacher ist als bei C und C++. Dynamisch zugewiesene Objekte werden durch Garbage Collection gesammelt. Die Go-Sprache macht die Verwendung von Zeigern sicherer, da sie keine Zeigerarithmetik zulässt. Es besteht auch die Möglichkeit, Werttypen zu verwenden.
Ein einfacheres Parallelitätsmodell
Obwohl gleichzeitiges Programmieren noch nie einfach war, ist gleichzeitiges Programmieren in Go einfacher als in anderen Sprachen. Es ist fast so einfach wie das Erstellen eines leichtgewichtigen Threads namens „Goroutine“ und die Kommunikation mit diesem über einen „Kanal“, aber auch komplexere Modelle sind möglich.
Wie wir bereits besprochen haben, ist Go tatsächlich eine ausgezeichnete Sprache. Es hat eine saubere Syntax und ist schnell auszuführen. Es hat auch viele Vorteile. Allerdings kommt es bei einer Programmiersprache nicht nur auf ihre Syntax an. Hier sind einige der Probleme, auf die wir gestoßen sind.
Keine Generika
Zuallererst ist dieses Problem wie der Elefant im Raum, es ist eine offensichtliche, aber ignorierte Tatsache. Die Go-Sprache hat keine Generika. Für Entwickler, die aus einer Sprache wie Java kommen, ist der Wechsel zu Go eine große Hürde, die es zu überwinden gilt. Dies bedeutet, dass der Grad der Code-Wiederverwendung reduziert wird. Obwohl die Go-Sprache über erstklassige Funktionen verfügt, können Sie diese Funktionen nicht für Sammlungen unterschiedlicher Typen wiederverwenden, wenn Sie Funktionen wie „map“, „reduce“ und „filter“ schreiben und diese Funktionen so entwerfen, dass sie auf Sammlungen eines Typs funktionieren. . Es gibt viele Möglichkeiten, dieses Problem zu lösen, aber alle erfordern letztendlich das Schreiben von mehr Code, was die Produktivität und Wartbarkeit verringert.
Schnittstellen sind implizit
Obwohl es schön ist, Schnittstellen zu haben, implementieren Strukturen Schnittstellen eher implizit als explizit. Dies soll eine der Stärken der Go-Sprache sein, aber wir fanden es schwierig, anhand der Struktur zu erkennen, ob sie die Schnittstelle implementiert. Sie können es nur wirklich wissen, indem Sie versuchen, das Programm zu kompilieren. Dies ist sicherlich kein Problem, wenn das Programm klein ist. Aber wenn das Programm mittelgroß bis groß angelegt ist, wird das Problem groß sein.
Schlechte Bibliotheksunterstützung
Die Unterstützung der Go-Sprachbibliothek ist lückenhaft. Unsere API lässt sich in Contentful integrieren, das über kein offiziell unterstütztes Go SDK verfügt. Das bedeutet, dass wir viel Code schreiben (und pflegen!) müssen, um Daten von Contentful anzufordern und zu analysieren. Wir müssen uns auch auf Elasticsearch-Bibliotheken von Drittanbietern verlassen. Von Anbietern bereitgestellte Go-SDKs sind nicht so beliebt wie ihre Java-, Ruby- oder JavaScript-Pendants.
Community-Kommunikation ist schwierig
Go-Community akzeptiert möglicherweise keine Vorschläge. Betrachten Sie dieses Problem im GitHub-Repository von Golint: https://github.com/golang/lint/issues/65. Ein Benutzer hat beantragt, dass Golint den Build abbrechen kann, wenn eine Warnung gefunden wird (dies ist, was wir in der Projektangelegenheit tun). ). Die Betreuer lehnten die Idee sofort ab. Es äußerten sich jedoch so viele Leute zu dem Problem, dass die Betreuer die gewünschte Funktion ein Jahr später schließlich hinzufügten.
Die Go-Community scheint Web-Frameworks ebenfalls nicht zu mögen. Die HTTP-Bibliothek von Go deckt zwar viele Bereiche ab, unterstützt jedoch weder Pfadparameter, Eingabeprüfung und -validierung noch die bei Webanwendungen üblichen übergreifenden Probleme. Ruby-Entwickler haben Rails, Java-Entwickler haben Spring MVC und Python-Entwickler haben Django. Viele Go-Entwickler verzichten jedoch auf die Verwendung von Frameworks. Die Realität ist jedoch, dass es keine Rahmenwerke gibt, im Gegenteil, es gibt viele. Aber wenn man erst einmal damit begonnen hat, ein Framework für ein Projekt zu verwenden, ist es fast unmöglich, es aufzugeben.
Split Dependency Management
Lange Zeit gab es in der Go-Sprache keinen stabilen, formalen Paketmanager. Das Go-Projekt wurde erst kürzlich nach Jahren des Bettelns in der Community veröffentlicht. Es gab bereits viele Tools, die diese Lücke füllten. Wir verwenden in unseren Projekten Govendor, das sehr leistungsfähig ist. Dies bedeutet jedoch, dass die Community fragmentiert ist und für Entwickler, die mit der Go-Sprache noch nicht vertraut sind, sehr verwirrend sein kann. Darüber hinaus basieren fast alle Paketmanager auf Git-Repositorys, und der Verlauf der Git-Repositorys kann sich jederzeit ändern. Vergleichen Sie dies mit Maven Central, das niemals die Bibliotheken entfernt oder ändert, von denen Ihr Projekt abhängt.
Entscheidung, ob die Go-Sprache verwendet werden soll
Manchmal müssen Sie die Situation der Maschine berücksichtigen. Wenn Sie Bytes senden und empfangen. Wenn Sie Tausende gleichzeitiger Prozesse verwalten. Möglicherweise schreiben Sie auch ein Betriebssystem, ein Containersystem oder einen Blockchain-Knoten. In diesen Fällen werden Sie sich höchstwahrscheinlich nicht für Generika interessieren. Weil Sie damit beschäftigt sind, jede Nanosekunde Leistung aus dem Chip herauszuholen.
Aber oft muss man an den Menschen denken. Geschäftsdomänendaten, die Sie verarbeiten müssen: Kunden, Mitarbeiter, Produkte, Bestellungen. Sie müssen eine Geschäftslogik schreiben, die auf diesen Domänenentitäten ausgeführt wird, und Sie müssen diese Geschäftslogik über die Jahre hinweg beibehalten. Und Sie müssen sich auf die sich ändernden Bedürfnisse einstellen, und zwar so schnell wie möglich. In diesen Fällen kommt es auf die Erfahrung des Entwicklers an.
Go ist eine Programmiersprache, die Maschinenzeit höher bewertet als menschliche Zeit. Manchmal ist die Maschinen- oder Programmleistung in Ihrem Bereich von entscheidender Bedeutung. In diesen Fällen kann Go eine gute Alternative zu C oder C++ sein. Wenn Sie jedoch eine typische N-Tier-Anwendung schreiben, treten häufig Leistungsengpässe in der Datenbank und, was noch wichtiger ist, bei der Modellierung der Daten auf.
Berücksichtigen Sie bei der Entscheidung, ob Sie die Go-Sprache verwenden möchten, die folgenden Faustregeln:
Wenn Sie mit Bytes arbeiten, ist die Go-Sprache möglicherweise eine gute Wahl.
Wenn Sie mit Daten arbeiten, ist die Go-Sprache möglicherweise keine gute Wahl.
Diese Situation könnte sich eines Tages in der Zukunft ändern. Die Go-Sprache und die Go-Community sind noch sehr jung. Sie könnten uns überraschen und Generika hinzufügen; oder ein beliebtes Web-Framework könnte die Oberhand gewinnen. Vorerst bleiben wir jedoch bei ausgereiften Programmiersprachen, die universelle Unterstützung und ausgereiftes Abhängigkeitsmanagement bieten und sich auf die Modellierung von Geschäftsdomänen konzentrieren.
Weitere technische Artikel zu Go finden Sie in der Kolumne Go-Sprachtutorial!
Das obige ist der detaillierte Inhalt vonÜber die Vor- und Nachteile der Programmierung in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!