Die Veröffentlichung der Programmiersprache , die von Google in Zusammenarbeit mit der Community als hybride Lösung entwickelt wird, kombiniert die hohe Leistung kompilierter Sprachen mit den Vorteilen von Skriptsprachen, wie der einfachen Codeerstellung, der schnellen Entwicklung und der Fehlersicherheit. Der Projektcode unter der BSD-Lizenz.
Die Syntax von Go basiert auf bekannten Elementen der Sprache C mit einzelnen Entlehnungen aus der Sprache Python. Die Sprache ist recht prägnant, aber der Code ist leicht lesbar und nachvollziehbar. Go-Code wird in separate Binär-Executable-Dateien kompiliert, die nativ ohne Verwendung einer virtuellen Maschine ausgeführt werden (Profiling-Module, Debugging und andere Systeme zur Fehlererkennung werden als ), was eine Leistung ermöglicht, die mit Programmen in C vergleichbar ist.
Das Projekt wird von Anfang an mit dem Fokus auf Multithreading und die effiziente Nutzung von Mehrkernsystemen entwickelt. Dabei werden auf Betreiber-Ebene implementierte Werkzeuge für die Organisation paralleler Berechnungen und die Interaktion zwischen gleichzeitig ausgeführten Methoden bereitgestellt. Die Sprache bietet zudem integrierte Schutzmechanismen gegen das Überschreiten der zulässigen Grenzen reservierter Speicherblöcke und ermöglicht die Nutzung eines Garbage Collectors.
Haupt , vorgestellt in der Veröffentlichung Go 1.14:
- Das neue Modulsystem im 'go' Befehl wurde für den allgemeinen Gebrauch freigegeben, ist standardmäßig aktiviert und wird empfohlen, um Abhängigkeiten zu verwalten anstelle von GOPATH. Das neue Modulsystem bietet integrierte Versionsunterstützung, Paketliefermittel und ein verbessertes Abhängigkeitsmanagement. Mit Modulen sind Entwickler nicht mehr an das Arbeiten innerhalb des GOPATH-Baums gebunden, sie können Abhängigkeiten explizit mit Versionen definieren und reproduzierbare Builds erstellen.
- Unterstützung für das Einbetten von Schnittstellen mit überschneidenden Methoden. Methoden aus der eingebetteten Schnittstelle können nun die gleichen Namen und Signaturen wie Methoden in bereits vorhandenen Schnittstellen haben. Explizit deklarierte Methoden bleiben wie bisher einzigartig.
- Die Leistung des 'defer' Ausdrucks wurde verbessert, wodurch sich die Geschwindigkeit kaum von einem direkten Aufruf einer verzögerten Funktion unterscheidet. Dies ermöglicht die Verwendung verzögerter Funktionsaufrufe in leistungssensibler Code.
- Asynchrone Koordination von Goroutinen gewährleistet – Schleifen, die keinen Funktionsaufruf enthalten, können nun potenziell nicht mehr zu einer gegenseitigen Blockierung des Planers oder zu Verzögerungen beim Beginn der Garbage Collection führen.
- Die Effizienz des Systems zur Verteilung von Speicherseiten hat sich erhöht, wobei nun signifikant weniger Lock-Konflikte in Konfigurationen mit hohen GOMAXPROCS-Werten zu beobachten sind. Infolgedessen sind Verzögerungen verringert und die Durchsatzrate beim parallelen intensiven Verteilen großer Speicherblöcke wurde erhöht.
- Die Sperren wurden optimiert und die Anzahl der Kontextwechsel bei der Verwendung interner Timer, die in den Funktionen time.After, time.Tick und net.Conn.SetDeadline verwendet werden, wurde reduziert.
- Im Go-Team ist das Flag "-mod=vendor" standardmäßig aktiviert, wenn im Stammverzeichnis ein Vendor-Verzeichnis vorhanden ist, das für die Bereitstellung von externen Abhängigkeiten eines bestimmten Anbieters vorgesehen ist. Ein separates Flag "-mod=mod" wurde hinzugefügt, um Module aus dem Modulkatalog und nicht aus dem Verzeichnis "vendor" zu laden. Wenn die Datei go.mod standardmäßig nur schreibgeschützt verfügbar ist, wird das Flag "-mod=readonly" gesetzt, wenn kein übergeordnetes Verzeichnis "vendor" vorhanden ist. Ein Flag "-modfile=file" wurde hinzugefügt, um eine alternative Datei go.mod anstelle der vorhandenen im Stammverzeichnis des Moduls festzulegen.
- Eine Umgebungsvariable GOINSECURE wurde hinzugefügt, bei der die Go-Befehlszeile keine HTTPS-Verwendung erfordert und die Zertifikatprüfung beim direkten Herunterladen von Modulen überspringt.
- Der Compiler erhält standardmäßig das aktivierte Flag "-d=checkptr" zur Überprüfung des Codes auf Einhaltung der Sicherheitsrichtlinien für unsafe.Pointer.
- Ein neues Paket wurde in die Lieferung aufgenommen mit nicht-kryptografischen Hashfunktionen zur Erstellung von Hash-Tabellen für beliebige Bytefolgen oder Strings.
- Ergänzende experimentelle Unterstützung für die 64-Bit-RISC-V-Plattform unter Linux wurde hinzugefügt.
- Die Unterstützung von FreeBSD auf 64-Bit ARM-Systemen wurde hinzugefügt.
Quelle: opennet.ru
