Heim >Backend-Entwicklung >Golang >golang: Array-Sharing zwischen Slices

golang: Array-Sharing zwischen Slices

WBOY
WBOYnach vorne
2024-02-09 22:42:09894Durchsuche

golang: Array-Sharing zwischen Slices

Der PHP-Editor Zimo führt Sie in diesem Artikel in das Wissen über die gemeinsame Nutzung von Arrays zwischen Slices in Golang ein. In Golang ist ein Slice ein dynamisches Array, das bei Bedarf automatisch erweitert werden kann. Die gemeinsame Nutzung von Arrays zwischen Slices ist eine sehr wichtige Funktion in Golang. Sie ermöglicht es mehreren Slices, dasselbe zugrunde liegende Array zu teilen, ohne Daten zu kopieren. Dies spart nicht nur Speicherplatz, sondern verbessert auch die Leistung. Als nächstes werden wir das Prinzip und die Verwendung der Array-Freigabe zwischen Slices im Detail erläutern.

Frageninhalt

Hier wird die Anhängefunktion von Slices erklärt.

Wie oben erwähnt, gibt append das aktualisierte Slice zurück.

Bedeutet dies, dass das neu erstellte Slice das zugrunde liegende Array nicht mit dem vorhandenen Slice teilt?

Bei anderen Slicing-Vorgängen, wie z. B. mySlice[x:y], teilt das neue Slice das zugrunde liegende Array mit mySlice, wie unten gezeigt.

PS: Testcode:

var names = make([]string, 4, 10)
names1 := append(names, "Tom")

In diesem Fall ist also im Namen genügend verfügbare Kapazität enthalten. Daher kann durch Anhängen kein neues zugrunde liegendes Array erstellt werden.

Ausgabe:

[   ]
[    Tom]

Sollte die Ausgabe nicht mit dem gemeinsam genutzten zugrunde liegenden Array identisch sein?

Mir fehlt hier definitiv etwas ganz Grundlegendes.

Lösung

Sie haben Recht, names1 使用与 names dasselbe zugrunde liegende Array.

Nein, die Ausgabe sollte nicht dieselbe sein, da names 的长度为 4,而 names1 die Länge 5 hat. Beachten Sie, dass beide Kapazitäten (10) haben.

Hier ist ein Beispiel, das dies etwas verdeutlichen könnte:

func main() {
    emptyNames := make([]string, 0, 10)
    notEmptyNames := append(emptyNames, "Jerry")
    extendedNames := emptyNames[:1] // OK, because 1 < cap(emptyNames)
    fmt.Println("emptyNames:", emptyNames)
    //emptyNames: []
    fmt.Println("notEmptyNames:", notEmptyNames)
    //notEmptyNames: [Jerry]
    fmt.Println("extendedNames:", extendedNames)
    //extendedNames: [Jerry]
}

Das obige ist der detaillierte Inhalt vongolang: Array-Sharing zwischen Slices. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen