Heim  >  Artikel  >  Backend-Entwicklung  >  Ist go eine Sprache?

Ist go eine Sprache?

青灯夜游
青灯夜游Original
2022-12-19 13:49:436642Durchsuche

go ist eine Sprache. Go (auch bekannt als Golang) ist eine von Google entwickelte statisch stark typisierte, kompilierte, gleichzeitige und Garbage-Collection-Programmiersprache. Go ist eine kompilierte Sprache, die einen Compiler zum Kompilieren von Code verwendet. Ein Compiler kompiliert Quellcode in ein Binärformat (oder Bytecode-Format). Beim Kompilieren prüft der Compiler, ob Fehler vorliegen, optimiert die Leistung und gibt Binärdateien aus, die auf verschiedenen Plattformen ausgeführt werden können.

Ist go eine Sprache?

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

go ist eine Sprache.

Go (auch bekannt als Golang) ist eine statisch stark typisierte, kompilierte Sprache, die von Robert Griesemer, Rob Pike und Ken Thompson von Google entwickelt wurde. Die Syntax der Go-Sprache ähnelt der von C, ihre Funktionen umfassen jedoch: Speichersicherheit, GC (Garbage Collection), Strukturform und gleichzeitiges Rechnen im CSP-Stil.

Die Go-Sprache wird manchmal als „C-ähnliche Sprache“ oder „die C-Sprache des 21. Jahrhunderts“ beschrieben. Go erbt ähnliche Ausdruckssyntax, Kontrollflussstruktur, grundlegende Datentypen, Aufrufparameterwertübertragung, Zeiger und viele andere Ideen von der C-Sprache. Es verfügt außerdem über die Laufeffizienz von kompiliertem Maschinencode, die die C-Sprache schon immer geschätzt hat, und stimmt mit dem vorhandenen Seamless überein Anpassung an das Betriebssystem.

Da die Go-Sprache nicht über die Konzepte von Klassen und Vererbung verfügt, sieht sie nicht wie Java oder C++ aus. Aber es erreicht Polymorphismus durch das Konzept der Schnittstelle. Die Go-Sprache verfügt über ein klares und leicht verständliches, leichtgewichtiges Typsystem und es gibt keine Hierarchie zwischen den Typen. Daher kann man sagen, dass die Go-Sprache eine Hybridsprache ist.

Go ist eine kompilierte Sprache.

Go verwendet einen Compiler zum Kompilieren von Code. Ein Compiler kompiliert Quellcode in ein Binärformat (oder Bytecode-Format). Beim Kompilieren prüft der Compiler, ob Fehler vorliegen, optimiert die Leistung und gibt Binärdateien aus, die auf verschiedenen Plattformen ausgeführt werden können. Um ein Go-Programm zu erstellen und auszuführen, muss ein Programmierer die folgenden Schritte ausführen.

  • Verwenden Sie einen Texteditor, um ein Go-Programm zu erstellen;

  • Kompilieren Sie das Programm;

  • Führen Sie die kompilierte ausführbare Datei aus.

  • Dies ist anders als bei Sprachen wie Python, Ruby und JavaScript, die keinen Kompilierungsschritt enthalten. Go wird mit einem Compiler geliefert, sodass kein separater Compiler installiert werden muss.

Warum sollten Sie die Go-Sprache lernen?

Wenn Sie Systemprogramme oder netzwerkbasierte Programme erstellen möchten, ist die Go-Sprache eine sehr gute Wahl. Da es sich um eine relativ neue Sprache handelt, wurde sie von erfahrenen und angesehenen Informatikern entwickelt, um die Herausforderungen bei der Erstellung umfangreicher gleichzeitiger Netzwerkprogramme zu bewältigen. Vor dem Aufkommen der Go-Sprache standen Entwickler immer vor einer sehr schwierigen Entscheidung: ob sie eine Sprache (wie C++) verwenden sollten, die eine schnelle Ausführungsgeschwindigkeit, aber keine ideale Kompilierungsgeschwindigkeit aufweist, oder ob sie eine Sprache verwenden sollten, die eine schnelle Kompilierung ermöglicht Geschwindigkeit, aber schlechte Ausführungseffizienz (z. B. .NET, Java) oder dynamische Sprachen, die weniger schwierig zu entwickeln sind, aber eine durchschnittliche Ausführungsgeschwindigkeit haben? Offensichtlich erreicht die Go-Sprache die beste Balance zwischen diesen drei Bedingungen: schnelle Kompilierung, effiziente Ausführung und einfache Entwicklung.

Go-Sprache unterstützt Cross-Compilation. Sie können beispielsweise Anwendungen entwickeln, die unter Windows auf einem Computer mit Linux-System ausgeführt werden können. Dies ist die erste Programmiersprache, die UTF-8 vollständig unterstützt. Dies spiegelt sich nicht nur darin wider, dass sie UTF-8-codierte Zeichenfolgen verarbeiten kann, sondern auch, dass ihr Quellcode-Dateiformat UTF-8-Codierung verwendet. Go-Sprache ist wirklich international!

Funktionen der Go-Sprache

Einfache Syntax

  • Abgesehen vom grammatikalischen Stil weist Go allein in Bezug auf Typen und Regeln viele Ähnlichkeiten mit C99 und C11 auf, weshalb die Go-Sprache als wichtige Gründe bezeichnet wird für den Namen „NextC“.

  • Die Grammatik der Go-Sprache weist die beiden Extreme Einfachheit und Komplexität auf. Die C-Sprache ist so einfach, dass Sie sich jedes Mal, wenn Sie eine Codezeile schreiben, vorstellen können, wie sie nach der Kompilierung aussehen wird, wie Anweisungen ausgeführt werden, wie Speicher zugewiesen wird usw. Die Komplexität von C besteht darin, dass es zu viele undurchsichtige und irrelevante Regeln enthält, was wirklich Kopfschmerzen bereitet. Im Vergleich dazu beginnt Go bei Null und hat kein historisches Gepäck. Nachdem es viele Erfahrungen und Lektionen gelernt hat, kann es eine Welt mit strengen Regeln und einfacher Organisation von Grund auf planen.

Die grammatikalischen Regeln der Go-Sprache sind streng, es gibt keine Mehrdeutigkeit und es gibt keine Variationen der schwarzen Magie. Der von allen geschriebene Code ist grundsätzlich derselbe, was das Erlernen der Go-Sprache erleichtert. Ich denke, es lohnt sich, einen Teil der „Flexibilität“ und „Freiheit“ im Austausch für eine bessere Wartbarkeit aufzugeben.

Degradieren Sie „++“ und „--“ von Operatoren zu Anweisungen, behalten Sie Zeiger bei, verhindern Sie jedoch standardmäßig Zeigeroperationen, und die Vorteile liegen auf der Hand. Darüber hinaus wird die Verwendung von Slices und Wörterbüchern als integrierte Typen und deren Optimierung auf der Laufzeitebene ebenfalls als „einfach“ angesehen.

Parallelitätsmodell

Heute ist die gleichzeitige Programmierung zu einer Grundkompetenz für Programmierer geworden, und in verschiedenen technischen Communities sind viele verwandte Diskussionsthemen zu sehen. In diesem Fall hat die Go-Sprache etwas sehr Mutiges und Ungewöhnliches getan und grundsätzlich alles gleichzeitig ausgeführt. Sie verwendet Goroutine, um alles während der Laufzeit auszuführen, einschließlich der main.main-Eingabefunktion.

Man kann sagen, dass Goroutine das wichtigste Merkmal von Go ist. Es verwendet einen Coroutine-ähnlichen Ansatz zur Handhabung gleichzeitiger Einheiten, führt aber auch eine tiefere Optimierung auf Laufzeitebene durch. Dies macht die syntaktische gleichzeitige Programmierung extrem einfach. Es besteht keine Notwendigkeit, sich mit Rückrufen zu befassen, keine Notwendigkeit, auf den Thread-Wechsel zu achten, nur ein Schlüsselwort, einfach und natürlich.

Verwenden Sie den Kanal, um das CSP-Modell zu implementieren. Die Entkopplung der Datenkopplung zwischen gleichzeitigen Einheiten und die Möglichkeit, dass jede ihre eigenen Aufgaben ausführen kann, ist eine willkommene Erleichterung für alle Entwickler, die mit Speicherfreigabe und Sperrgranularität zu kämpfen haben. Wenn es irgendwelche Mängel gibt, dann ist es, dass es einen größeren Plan geben sollte, die Kommunikation von innerhalb des Prozesses nach außerhalb des Prozesses auszuweiten, um eine echte Verteilung zu erreichen.

  • Speicherzuweisung

Parallelität ist gut, bringt aber auch viele Probleme mit sich. Es ist ein schwieriges Problem, die Speicherzuweisung und -verwaltung bei hoher Parallelität zu erreichen. Glücklicherweise entschied sich Go für tcmalloc, eine leistungsstarke Speicherzuweisungskomponente, die auf Parallelität ausgelegt ist.

Man kann sagen, dass der Speicherzuweiser der Teil ist, der sich unter den drei Hauptkomponenten der Laufzeit am wenigsten ändert. Mit Ausnahme des Inhalts, der für die Zusammenarbeit mit dem Garbage Collector geändert wurde, behält der Speicherzuweiser vollständig die ursprüngliche Struktur von tcmalloc bei. Verwenden Sie den Cache, um eine sperrenfreie Zuweisung für den aktuellen Ausführungsthread bereitzustellen, und mehrere Zentraleinheiten, um die Wiederverwendung von Speichereinheiten zwischen verschiedenen Threads auszugleichen. Auf einer höheren Ebene verwaltet der Heap große Speicherblöcke und unterteilt sie in verschiedene Ebenen wiederverwendeter Speicherblöcke. Die schnelle Zuweisung und der sekundäre Speicherausgleichsmechanismus ermöglichen es dem Speicherzuweiser, Speicherverwaltungsaufgaben unter hohem Druck hervorragend zu erledigen.

In neueren Versionen war die Compileroptimierung sehr effektiv. Es wird sein Bestes geben, Objekte auf dem Stapel zuzuweisen, um den Druck der Speicherbereinigung zu verringern, den Verwaltungsverbrauch zu reduzieren und die Ausführungsleistung zu verbessern. Man kann sagen, dass wir, abgesehen von gelegentlichen Leistungsproblemen, die die Verwendung von Objektpools und der autonomen Speicherverwaltung erzwingen, grundsätzlich nicht an Speicherverwaltungsvorgängen teilnehmen müssen.

  • Müllabfuhr

Müllabfuhr war schon immer ein Problem. In den Anfangsjahren wurde Java wegen seiner ineffizienten Speicherbereinigung lange belächelt. Später integrierte Sun sukzessive viele Menschen und Technologien, um es zu dem zu entwickeln, was es heute ist. Aber selbst dann ist die Speicherbereinigung in Anwendungsszenarien mit großem Speicher wie Hadoop immer noch überlastet und schwierig.

Im Vergleich zu Java ist Go mit größeren Schwierigkeiten konfrontiert. Aufgrund der Existenz von Zeigern kann der zurückgewonnene Speicher nicht verkleinert werden. Glücklicherweise ist die Zeigerarithmetik blockiert, sonst wäre es schwierig, eine genaue Wiederverwertung zu erreichen.

Bei jedem Upgrade muss der Garbage Collector der am meisten geänderte Teil der Kernkomponente sein. Von der gleichzeitigen Bereinigung über die Reduzierung der STW-Zeit bis hin zur Implementierung der gleichzeitigen Markierung in Version 1.5 von Go und der schrittweisen Einführung von dreifarbigen Markierungen und Schreibbarrieren usw. sollen alle dafür sorgen, dass die Speicherbereinigung besser funktioniert, ohne die Benutzerlogik zu beeinträchtigen. Trotz aller Bemühungen kann die aktuelle Version des Garbage-Collection-Algorithmus nur als brauchbar bezeichnet werden, und es ist noch ein langer Weg, bis sie brauchbar ist.

  • Statische Links

Als Go zum ersten Mal veröffentlicht wurde, wurden statische Links als Vorteile beworben. Es kann lediglich eine kompilierte ausführbare Datei bereitgestellt werden, ohne etwas anzuhängen. Das schien eine gute Idee zu sein, doch dann änderte sich der Trend. In mehreren aufeinanderfolgenden Versionen hat der Compiler die Buildmode-Funktion der dynamischen Bibliothek verbessert, und die Situation ist seit einiger Zeit etwas peinlich.

Lassen Sie den unvollendeten Buildmodus-Modus vorerst beiseite, die Vorteile der statischen Kompilierung liegen auf der Hand. Die Laufzeit- und abhängigen Bibliotheken werden direkt in die ausführbare Datei gepackt, was die Bereitstellungs- und Release-Vorgänge vereinfacht. Es ist nicht erforderlich, die Betriebsumgebung im Voraus zu installieren und viele Bibliotheken von Drittanbietern herunterzuladen. Dieser einfache Ansatz ist für das Schreiben von Systemsoftware von großem Vorteil, da Bibliotheksabhängigkeiten schon immer ein Problem darstellten.

  • Standardbibliothek

Die Standardbibliothek mit vollständigen Funktionen und zuverlässiger Qualität bietet ausreichend Leistung für Programmiersprachen. Die Entwicklung der meisten grundlegenden Funktionen kann ohne die Hilfe von Erweiterungen von Drittanbietern durchgeführt werden, was die Lern- und Nutzungskosten erheblich reduziert. Das Wichtigste ist, dass die Standardbibliothek garantiert aktualisiert und repariert wird und außerdem den Komfort einer umfassenden Optimierung zur Laufzeit nutzen kann, der in Bibliotheken von Drittanbietern nicht verfügbar ist.

Obwohl die Go-Standardbibliothek nicht vollständig abgedeckt ist, ist sie dennoch äußerst umfangreich. Eines der lobenswertesten davon ist net/http, das mit nur wenigen einfachen Anweisungen einen leistungsstarken Webserver implementieren kann. Dies war schon immer ein Höhepunkt der Öffentlichkeitsarbeit. Darüber hinaus haben eine große Anzahl hervorragender darauf basierender Drittanbieter-Frameworks Go zu einem der Web-/Microservice-Entwicklungsstandards gemacht.

Natürlich sind auch hervorragende Ressourcen Dritter ein wichtiger Teil des Sprachökosystems. Unter den verschiedenen Sprachen, die in den letzten Jahren entstanden sind, ist Go einzigartig, da häufig eine große Anzahl hervorragender Werke auftaucht, was uns auch eine gute Referenz zum Erlernen von Go bietet.

  • Werkzeugkette

Eine vollständige Toolkette ist für die tägliche Entwicklung äußerst wichtig. Go hat hier ziemlich gute Arbeit geleistet, mit entsprechenden Tools für Kompilierung, Formatierung, Fehlerprüfung, Hilfedokumentation sowie Paket-Downloads und -Updates von Drittanbietern. Seine Funktionen sind vielleicht nicht perfekt, aber zumindest ist es einfach und leicht zu bedienen.

Eingebautes vollständiges Test-Framework, einschließlich Unit-Tests, Leistungstests, Codeabdeckung, Datenwettbewerb und pprof für die Optimierung. Dies sind wichtige Tools, um sicherzustellen, dass der Code korrekt und stabil ausgeführt werden kann.

Darüber hinaus können Laufzeitüberwachungsinformationen auch über Umgebungsvariablen ausgegeben werden, insbesondere über Garbage Collection und Concurrent Scheduling Tracking, was uns dabei helfen kann, den Algorithmus weiter zu verbessern und eine bessere Laufzeitleistung zu erzielen.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !

Das obige ist der detaillierte Inhalt vonIst go eine 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