Laufzeit-Überprüfung von comparable Constraints
Typen, die als Schlüssel in Maps genutzt oder per == verglichen werden, müssen vergleichbar (comparable) sein. Das trifft auf die meisten primitiven Datentypen zu, allerdings nicht auf Slice- oder Funktionstypen. Als Sonderfall lassen sich auch Interface-Typen verwenden, wobei dann zur Laufzeit ein Check stattfindet, ob der tatsächlich übergebene Typ vergleichbar ist.
In generischen Funktionen versucht der Compiler diese Überprüfung während der Übersetzung, was fehlschlägt. Der Compiler ließ also keine Interface-Typen als generische Typen zu, wenn diese als Map-Schlüssel oder in einem Vergleich benutzt wurden. Mit Go 1.20 fällt diese Einschränkung weg.
Slice-zu-Array-Konvertierung
In Go 1.17 wurde die Möglichkeit eingeführt, ein Slice wieder in ein Array zu konvertieren. Slices sind Referenzen auf einen Teil eines Arrays. Der große Vorteil liegt dabei in der Flexibilität. Hat das unterliegende Array ausreichend Platz, können weitere Elemente angehängt werden, ohne dass die bestehenden Elemente in ein größeres Array kopiert werden.
Außerdem muss nicht jedes Mal das komplette Array kopiert werden, wenn es einer Funktion übergeben werden soll. Go hat von Anfang an die Möglichkeit, ein Slice von einem bestehenden Array zu erzeugen (slice):
array := [4]int{1, 2, 3, 4} slice := array [:] // erzeugt ein Slice über das komplette Array
Umgekehrt war das lange nicht möglich. In Go 1.17 wurde die Möglichkeit zwar eingeräumt, die Syntax erinnert aber mehr an C als Go. Letztlich wurde lediglich der Type-Check beim Konvertieren des Slices zum Pointer eines Arrays geändert.
slice := []int{1, 2, 3, 4} array := *(*[4]int)(slice)
Mit der neuen Version 1.20 wird die Syntax deutlich vereinfacht.
array := [4]int(slice)
Das Ziel-Array sollte hierbei kleiner oder gleich der Kapazität des Arrays sein, das slice zugrunde liegt. Andernfalls wird eine Runtime-Panic ausgelöst.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
Programmiersprache: Das ändert sich in Go 1.20 | Kleine Änderungen |
Wenn der Anwendungsfall ein einfacher ETL-Prozess ist, wo Daten von Bib A an Bib B...
Kommentieren