Gedanke an einen ausgeklügelten Trick und dachte, ich würde ihn teilen.
Wenn Sie wissen wollen, ob zwei Slices identisch sind (das heißt, sie verweisen auf dieselbe Datenregion) anstatt nur gleich (der Wert an jedem Index einer Slice entspricht dem Wert im gleichen Index der anderen), können Sie sie effizient wie folgt vergleichen:
foo := []int{1,3,5,7,9,11,13,15,17,19}
// Diese beiden Slices sind genau identisch
subslice1 := foo[3:][:4]
subslice2 := foo[:7][3:]
slicesEqual := &subslice1[0] == &subslice2[0] &&
len(subslice1) == len(subslice2)
Es gibt einige Einschränkungen bei dieser Art von Vergleich, insbesondere können leere Slices nicht auf diese Weise verglichen werden und die Kapazität der Slices wird nicht berücksichtigt. Daher ist diese "Identität" nur wirklich nützlich beim Lesen aus einer Slice oder beim Erstellen einer streng schmaleren Subslice, da jeder Versuch, die Slice zu vergrößern, von der Kapazität der Slices beeinflusst wird. Dennoch ist es sehr nützlich, "diese beiden riesigen Speicherblöcke sind tatsächlich derselbe Block, ja oder nein" effizient zu deklarieren.