Go: Iterieren über Zeiger auf Slices
Bei der Arbeit mit Go-Slices ist es wichtig zu verstehen, wie Zeiger und Slices interagieren. Der bereitgestellte Code löst den Fehler „Bereich kann nicht über Zeiger auf Slice reichen“ aus, weil er versucht, über einen Zeiger auf ein Slice zu iterieren, ohne es zu dereferenzieren.
Ein Slice ist eine flexible Datenstruktur, die auf ein Array zeigt. Obwohl es einige Ähnlichkeiten mit Zeigern aufweist, unterscheidet es sich darin, dass ein Slice bereits einen Zeiger auf das zugrunde liegende Array kapselt. Daher hat das Erstellen eines Zeigers auf ein Slice keinen Zweck und kann zu Verwirrung führen.
Im Codeausschnitt tritt der Fehler in der Funktion „populateClassRelationships“ auf, insbesondere in der Zeile:
for i := range classes {
classes := new([]entities.Class)
Anstatt einen Zeiger auf ein Slice (*[]entities.Class) zu verwenden, besteht der richtige Ansatz darin, das Slice selbst zu übergeben, wie in der geänderten Version zu sehen ist Code:
func (c *ClassRepository) ClassesForLastNDays(days int) []entities.Class { classes := new([]entities.Class)
Durch die Änderung des Codes auf diese Weise dereferenziert Go das Slice automatisch und ermöglicht eine ordnungsgemäße Iteration. Weitere Informationen zu Slices und Zeigern finden Sie in der offiziellen Go-Dokumentation.
Das obige ist der detaillierte Inhalt vonWarum wirft Go den Fehler „Zeiger zum Slice kann nicht überschritten werden' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!