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

golang: Array-Sharing zwischen Slices

WBOY
Freigeben: 2024-02-09 22:42:09
nach vorne
892 Leute haben es durchsucht

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")
Nach dem Login kopieren

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]
Nach dem Login kopieren

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]
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage