Vorgestellt wird die Veröffentlichung der Programmiersprache Go 1.22, die von Google unter Beteiligung der Community als Hybridlösung entwickelt wird, die die hohe Leistung kompilierter Sprachen mit Vorteilen von Skriptsprachen wie der einfachen Codeschreibbarkeit kombiniert , Entwicklungsgeschwindigkeit und Fehlerschutz. Der Projektcode wird unter der BSD-Lizenz verteilt.
Die Syntax von Go basiert auf bekannten Elementen der C-Sprache mit einigen Anleihen aus der Oberon-Sprache. Die Sprache ist recht prägnant, aber der Code ist leicht zu lesen und zu verstehen. Go-Code wird in eigenständige ausführbare Binärdateien kompiliert, die nativ ausgeführt werden, ohne dass eine virtuelle Maschine verwendet wird (Profilerstellung, Debugging-Module und andere Subsysteme zur Identifizierung von Problemen zur Laufzeit sind als Laufzeitkomponenten integriert), was eine mit C-Programmen vergleichbare Leistung ermöglicht.
Das Projekt wird zunächst mit Blick auf Multithread-Programmierung und effizienten Betrieb auf Multi-Core-Systemen entwickelt, einschließlich der Bereitstellung von Mitteln auf Bedienerebene zur Organisation paralleler Berechnungen und Interaktion zwischen parallel ausgeführten Methoden. Die Sprache bietet außerdem einen integrierten Schutz vor überbelegten Speicherblöcken und bietet die Möglichkeit, einen Garbage Collector zu verwenden.
Zu den Änderungen in der neuen Version gehören:
- Unterstützung für die Definition von Bereichen ganzer Zahlen wurde zu „for“-Schleifen hinzugefügt. Um beispielsweise über Werte von 0 bis 9 zu iterieren, können Sie jetzt die Schleife „for i := range 10 {…}“ verwenden.
- Für For-Schleifen wurde experimentelle Unterstützung (GOEXPERIMENT=rangefunc) für Bereichsfunktionen hinzugefügt. Dadurch kann eine Funktion als Iterator angegeben werden. Beispiel: „for i, x := range slices.Backward(s) {…}“
- Ein seit langem bestehendes Problem mit For-Schleifen, das dazu führte, dass Goroutine-Aufrufe Schleifenvariablen über Iterationen hinweg gemeinsam nutzten, wurde behoben. Beispiel: values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done
Source: opennet.ru
