Heim  >  Artikel  >  Backend-Entwicklung  >  Was sind die Nachteile der Go-Sprache?

Was sind die Nachteile der Go-Sprache?

青灯夜游
青灯夜游Original
2022-12-21 19:36:387146Durchsuche

Nachteile der Go-Sprache: 1. „Leistungsnachteile“, die durch die Wahl der technischen Route verursacht werden. Go ist eine GC-Programmiersprache. In einigen Situationen, in denen die Leistung sehr empfindlich ist, müssen Sie bei der Auswahl von Go dennoch vorsichtig sein. 2. „Einzelausdrucksmethode“ und explizite Fehlerbehandlung sind etwas „veraltet“. 3. Die kleinste Version weicht vom Mainstream ab. 4. Das Go-Kernteam hat die volle Kontrolle über die Entwicklung der Sprache Die Mehrheit der Community stimmt zu, dass die Übernahme und Hinzufügung zur Go-Sprache zu einem Nachteil in der Community geführt hat. Es gibt eine „Kluft“ zwischen der Go-Community und dem Go-Kernteam. 5. Schwache Funktionalität

Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO-Version 1.18, Dell G3.

Was sind die Nachteile der Go-Sprache?Jede Programmiersprache hat ihre eigenen Vor- und Nachteile, und Go ist keine Ausnahme. von Go:

Go-Vorteile

1. Leicht zu erlernenDie Go-Sprache hat eine einfache Syntax, die der C-Sprache ähnelt, wenn der Leser zwei bis drei Programmiersprachen beherrscht Wenige Tage zum Erlernen der Go-Sprache, selbst für einen neuen Entwickler können Sie in wenigen Wochen ein leistungsstarkes Go-Sprachprogramm schreiben

2 Kostenlos und effizient

Die Kompilierungsgeschwindigkeit der Go-Sprache ist deutlich besser als die von Java und C++, und es hat auch eine Betriebseffizienz, die der von PHP ähnelt. Man kann sagen, dass die Go-Sprache Betriebseffizienz und Entwicklungseffizienz perfekt integriert.

Gleichzeitig unterstützt die Go-Sprache auch alle Aktuelle Programmierparadigmen, einschließlich prozeduraler Programmierung, schnittstellenorientierter Programmierung und funktionaler Programmierentwicklung, können entsprechend ihren Anforderungen frei kombiniert werden

Die Standardbibliothek in Go ist sehr stabil und vielfältig, einschließlich Netzwerk-, System-, Verschlüsselungs-, Grafik- und anderen Aspekten, insbesondere Netzwerk- und Systembibliotheken. Es ist sehr praktisch und ermöglicht es Entwicklern, sich bei der Entwicklung großer Programme kaum auf Bibliotheken von Drittanbietern zu verlassen

Keine Notwendigkeit, eine virtuelle Maschine zu verwenden, der Go-Sprachcode kann direkt als binäre ausführbare Datei ausgegeben werden, und die Go-Sprache verfügt über einen eigenen Linker und ist nicht auf einen vom System bereitgestellten Compiler oder Linker angewiesen. Die kompilierte ausführbare Binärdatei kann in fast jeder Systemumgebung ausgeführt werden.

Die Sprache Go unterstützt die Parallelität nativ und ist sehr einfach zu verwenden basiert auf Goroutine. Goroutine ist jedoch kein Thread. Die Kosten für die Erstellung von Goroutine sind sehr gering Normalerweise wird ein gewöhnlicher Desktop-Host überlastet, wenn er Hunderte von Threads ausführt, aber derselbe Host kann Tausende oder sogar Zehntausende von Goroutinen ausführen. Die Kommunikation kann über Goroutine- und kanalbasierte Parallelitätsmethoden erreicht werden, um die Nutzung von CPU-Ressourcen zu maximieren .

6. Starke Stabilität

Die Go-Sprache verfügt über leistungsstarke Kompilierungsprüfungen, strenge Codierungsstandards und starke Stabilität. Darüber hinaus bietet die Go-Sprache auch Tools für jeden Aspekt des Software-Lebenszyklus (z. B. Entwicklung, Test, Bereitstellung, Wartung). usw.), wie zum Beispiel: go tool, go fmt, go test usw.

7. Garbage Collection

Bei der Entwicklung mit der Go-Sprache müssen Entwickler nur auf die Speicheranwendung achten und müssen sich nicht um die Speicherfreigabe kümmern, da die Go-Sprache über eine integrierte Laufzeit für die automatische Verwaltung verfügt. Obwohl GC (Garbage Collection, Garbage Collection-Mechanismus) derzeit nicht perfekt ist, reicht es aus, um die meisten Situationen zu bewältigen, die während der Entwicklung auftreten, sodass sich Entwickler mehr auf das Geschäft konzentrieren können. Gleichzeitig ermöglicht die Go-Sprache Entwicklern auch, diese Arbeit zu erledigen optimiert.

Nachteile von Go

1. „Leistungsnachteil“ durch die Wahl der technischen Route

Wie wir alle wissen, ist Go eine Programmiersprache mit Garbage Collection, also egal wie kurz Gos STW (Stop The Weltzeit ist die GC-Verzögerung so gering, dass sie immer noch zur Programmiersprache der GC-Klasse gehört und zum gleichen Lager wie Java und C# gehört. Gleichzeitig ist sie natürlich von Programmiersprachen wie z B. C, C++ und Rust, die den Speicher manuell verwalten und keine Laufzeit-GC-Belastung haben. Die Zeile wurde gelöscht. Obwohl die ursprüngliche Absicht der Go-Sprache darin besteht, eine Programmiersprache auf Systemebene zu werden, kann die Laufzeitleistung von Go die Anforderungen von 99,99 % der Fälle erfüllen, obwohl Baidus Billionen an Datenverkehr [Forwarding Engine BFE], Zeitreihendatenbank [influxdb], verteilte relationale Datenbanken [TiDB] und andere leistungsempfindliche Projekte haben sich für die Implementierung in Go entschieden, es lässt sich jedoch nicht leugnen, dass Sie in einigen äußerst leistungsempfindlichen Situationen bei der Auswahl von Go immer noch vorsichtig sein müssen.

2 Der „Ausdrucksnachteil“, der durch das Festhalten an der eigenen Designphilosophie entsteht

1) „Einzelne“ Ausdrucksmethode

Viele Entwickler, die aus anderen Sprachen in das Go-Lager gewechselt sind, beschweren sich, dass Go zu wenige Tricks hat und Keine Routinen Der Grund, warum Go einen „Ausdrucksnachteil“ aufweist, liegt für viele in einem Grundsatz seiner Designphilosophie: „Befürwortung, dass es nur eine oder mehrere Möglichkeiten gibt, etwas zu schreiben.“ Dieses Prinzip entspricht nicht dem psychologischen Bedürfnis einiger Entwickler, ihre Fähigkeiten zur Schau zu stellen, weshalb Go als eine Sprache kritisiert wird, die nur von Programmierern mit mittelmäßigen Qualifikationen verwendet wird.

[Go 1.18 wird Generika (Typparameter) hinzufügen], was als „Ausgleich“ für solche „Nachteile“ angesehen werden kann. Für diejenigen von uns Gophers, die die Werte und die Designphilosophie von Go schon lange erkannt haben, sind wir jedoch sehr besorgt, dass [Generika], die die Ausdrucksfähigkeiten von Go erheblich verbessert haben, zu einem „Brutboden“ für Tricks und Tricks werden.

2) „Veraltete“ explizite Fehlerbehandlung

Seit dem Tag ihrer Geburt bietet die Go-Sprache keine strukturierte Try-Catch-finally-Fehlerbehandlung basierend auf Ausnahmen wie gängige Programmiersprachen wie C++, Java und Python .Mechanismus, Go-Designer glauben, dass [die Kopplung von Ausnahmen in Programmkontrollstrukturen zu Codeverwirrung führen wird]. Go bietet einen einfachen Fehlerbehandlungsmechanismus, der auf dem Fehlerwertvergleich basiert und jeden Go-Entwickler dazu zwingt, jeden Fehler explizit zu beachten und zu behandeln. Dadurch wird der Code robuster Code. Die Beharrlichkeit dieser Designphilosophie wurde jedoch von vielen Entwicklern anderer Sprachen als „veraltet“ verspottet und als „ein uralter Mechanismus von vor einem halben Jahrhundert“ bezeichnet. (Anmerkung des Autors: Der Fehlerbehandlungsmechanismus, der bei der Geburt der C-Sprache in den 1970er Jahren verwendet wurde)

Das Go-Entwicklungsteam war auch „erschüttert“. Das Go-Entwicklungsteam hat nach der Veröffentlichung mehrere Versionen von [Go-Fehlerbehandlung neue Version] veröffentlicht der Go2-Plan. Auch in der Go-Community gab es lange Diskussionen und sogar „Streitigkeiten“ zu diesem Thema. Der bekannte Gopher Dave Cheney äußerte sich, Rob Pike und William Kennedy, ein bekannter Go-Trainer und einer der Co-Autoren von „. „Go Language Practical Combat“ Nachdem der Versuchsvorschlag des Go-Teams bekannt gegeben worden war, veröffentlichten sie einen offenen Brief an die Go-Community, in dem sie sich gegen den Versuchsplan aussprachen. Am Ende gewann die Gruppe, die auf der Go-Designphilosophie bestand, die Oberhand und der Versuchsvorschlag wurde abgelehnt und war nicht in [Go 1.13-Version] enthalten!

3. „Nischennachteil“, der vom Mainstream abweicht

Gos frühes Design des Paketabhängigkeitsverwaltungsmechanismus weist einige „Mängel“ auf, die auf den Einfluss von Googles internem großen Single-Code-Warehouse und Trunk-basierten Entwicklungsmodell zurückzuführen sind . Die Go-Sprache außerhalb von Google hat seit langem Stimmen aus verschiedenen Bereichen gehört. Der Go-Paketverwaltungsmechanismus konnte die Anforderungen der Community nicht erfüllen. Infolgedessen gab es Versuche, die Paketabhängigkeitsverwaltung wie [Vendor-Mechanismus] und [Dep] zu verbessern.

Zu Beginn des Jahres 2018, gerade als die meisten Gopher dachten, dass Dep „natürlich“ zu einem Teil der offiziellen Go-Toolkette aufgewertet würde, traf Russ Cox, der technische Leiter des Go-Kernteams und eines der ersten Mitglieder des Go Kernteam, veröffentlicht in seinem persönlichen Blog Er veröffentlichte [sieben Artikel] in Folge und erarbeitete systematisch die technische Lösung des Go-Teams für das „Paketabhängigkeitsmanagement“: [vgo], der Vorgänger des Go-Moduls.

Zu den Hauptideen von vgo gehören: Semantische Importversionierung und minimale Versionsauswahl, die im Widerspruch zu den aktuellen Paketabhängigkeitsverwaltungsregeln der gängigen Programmiersprachen stehen, insbesondere [Minimum Version Selection (MVS)], das als neuer Ansatz gilt und davon abweicht vom Mainstream!

4. Der „Community-Nachteil“, der durch den „demokratischen Zentralismus“ des Go-Kernteams verursacht wird, unterscheidet sich von der umfassenden Übernahme von Community-Vorschlägen zur „Erhöhung der Sprachfunktionen“ von Go Einstellung zur Sprachentwicklung Wenn die Mehrheit der Gemeinschaft nicht zustimmt, wird sie definitiv übernommen und zur Go-Sprache hinzugefügt. Ich nenne es scherzhaft „demokratischen Zentralismus“, das heißt, die wirklichen Stimmrechte liegen tatsächlich bei der Minderheit Menschen, die die Community im Go-Kernteam repräsentieren.

Der Streit zwischen dep und vgo Anfang 2018 ist ein typischer Ausdruck dieses „Nachteils“. Das Dep-Projekt, an dessen Aufbau die Community mehr als ein Jahr lang hart gearbeitet hat, wurde von vgo „verdrängt“, das von Russ Cox und einigen anderen Leuten entworfen wurde, die einige Zeit damit verbracht haben, es zu entwerfen. Die Position des Go Der Standard für Paketabhängigkeitsmanagement-Tools ist zu einem „Sprungbrett“ für den Erfolg von Go-Modulen geworden. Selbst wenn sich herausstellt, dass die Entscheidung des Go-Teams, das Go-Modul zu verwenden, richtig ist, besteht die dadurch verursachte „Kluft“ zwischen der Go-Community und dem Go-Kernteam, sodass das Go-Kernteam in den letzten zwei Jahren funktioniert hat Es ist schwierig, die Beziehung zur Go-Community zu verbessern, indem der Prozess des Vorschlagens, Überprüfens und Annehmens von Go-Vorschlägen standardisiert und transparent gemacht wird.

5. Nach dem Scheitern eines umfassenden Angriffs wurde die „funktionale Schwäche“ durch das Scheitern der Erwartungen verursacht

Nach der Veröffentlichung von Go 1.5 erregte Go aufgrund der deutlichen Reduzierung von Bootstrapping und GC-Verzögerungen allmählich mehr Aufmerksamkeit, bis die Anfang 2017. Der Gewinn des TIOBE-Preises für die beste Programmiersprache des Jahres zum zweiten Mal hat die Go-Sprache etwas „aufgeblasen“ gemacht. Selbst fanatische Go-Befürworter hofften einst, dass Go die Welt dominieren würde: nicht nur seinen eigenen Cloud-Native-Markt fest kontrollieren, sondern auch Es muss aber auch den Markt für Java auf Unternehmensebene besetzen und bestehende Konkurrenten auf dem Terminal (android. ios) und dem Front-End (js) besiegen.

Manche Leute mögen meine obigen Aussagen für lächerlich halten, aber sie sind nicht unbegründet. Die Go-Sprache hat in Terminal- und Frontend-Aspekten wirklich große Erfolge erzielt. Jeder, der die Geschichte von Go kennt, weiß, dass das Go-Team einst Vollzeitentwickler am [gomobile-Projekt] beteiligte, das darauf abzielt, die Go-Technologie zu entwickeln Stapel auf Android und iOS, um den Zweck des Schreibens von Terminalanwendungen in der Go-Sprache zu erreichen.

In Bezug auf das Front-End kann [GopherJS-Projekt] Go-Code in JS-Code kompilieren und ihn später in gängigen Browsern ausführen gopherjs hat dem Go-Projekt dabei geholfen, Webassembly nativ zu unterstützen. Unterstützt das Kompilieren von Go in Webassembly und dessen Ausführung im Browser

.

Aber der obige Versuch scheiterte letztendlich daran, „das zu bekommen, was wir wollten“. Die aktuelle Situation ist, dass im Bereich der Terminal- und Front-End-Anwendungen nur sehr wenige Leute Go-Codierung verwenden. Also beruhigte sich Go allmählich und kehrte auf das Hauptschlachtfeld zurück, wo es gut war, kehrte in die Bereiche Unternehmensanwendungen, Infrastruktur, Middleware, Microservices, Befehlszeilenanwendungen usw. zurück und gewann die Gunst von immer mehr Entwicklern diese Felder.

Das Scheitern des umfassenden Angriffs ließ jedoch viele Entwickler mit der Ausrede zurück, dass „Gos Funktionen schwach sind“. Einige sagen sogar, dass [mein Vater Google] nicht zulassen konnte, dass sein Bruder Android eine Hintertür für Go erstellt.

【Verwandte Empfehlungen: Go-Video-Tutorial, Programmierunterricht

Das obige ist der detaillierte Inhalt vonWas sind die Nachteile der Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn