Verstehen, warum copy() leere Slices nicht duplizieren kann
In Go ist die Funktion copy() zum Kopieren von Elementen zwischen zwei Slices gedacht , sodass mögliche Überschneidungen im Prozess möglich sind. Beim Versuch, ein leeres Slice zu kopieren, kann es jedoch zu unerwartetem Verhalten kommen.
Die Ursache des Problems:
In der Dokumentation heißt es, dass copy() Elemente aus a kopiert Quell-Slice in ein Ziel-Slice und gibt die Anzahl der kopierten Elemente zurück. Entscheidend ist, dass diese Anzahl durch die Mindestlänge der Quell- und Ziel-Slices bestimmt wird, wie in der Go-Sprachspezifikation angegeben.
Problem mit leeren Ziel-Slices:
Wenn die Ist das Ziel-Slice leer (d. h. len(dst) == 0), wird die Mindestlänge Null, was dazu führt, dass keine Elemente kopiert werden. Aus diesem Grund konnte copy() in Ihrem Beispiel Ihr tmp-Slice nicht füllen.
Lösung:
Um dieses Problem zu umgehen und erfolgreich ein leeres Slice zu kopieren, müssen Sie Folgendes tun Initialisieren Sie zunächst den Ziel-Slice mit ausreichender Kapazität. Dies kann mit make([]int, len(arr)) erreicht werden.
Aktualisierte Dokumentation:
Die Dokumentation für copy() wurde aktualisiert, um explizit anzugeben dass das Minimum der Quell- und Ziel-Slice-Längen kopiert wird. Diese Klarstellung behebt die Diskrepanz, die beim Versuch, leere Slices zu duplizieren, auftritt.
Das obige ist der detaillierte Inhalt vonWarum kann „copy()' leere Slices in Go nicht duplizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!