Wie bekomme ich das letzte Element einer Scheibe?

165

Was ist der Go-Weg zum Extrahieren des letzten Elements eines Slice?

var slice []int

slice = append(slice, 2)
slice = append(slice, 7)

slice[len(slice)-1:][0] // Retrieves the last element

Die obige Lösung funktioniert, scheint aber umständlich.

Morgan Wilde
quelle

Antworten:

294

Zum Lesen des letzten Elements eines Slice:

sl[len(sl)-1]

Zum Entfernen:

sl = sl[:len(sl)-1]

Siehe diese Seite über Slice-Tricks

Toni Cárdenas
quelle
34
Vielen Dank! Obwohl es albern erscheint, haben sie den -1Index, den Python hat, nicht hinzugefügt ...
Morgan Wilde
3
Ich mag das -1von Python, obwohl es oft zu schwer zu debuggenden Fehlern führt.
weberc2
10
Sie ließen es bewusst draußen. Es war nicht offensichtlich und fehleranfällig. Gehen Sie insgesamt umsichtig über "zu viel Bedeutung"; Es gibt auch keine Überladung von Methoden / Operatoren, Standardwerte für Funktionsparameter usw., was meiner Meinung nach in einem ähnlichen philosophischen Sinne geschieht. Siehe diese und andere Diskussionen: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas
2
Ich bin nicht sicher, aber ich habe panic: runtime error: index out of rangedafür profiles[len(profiles)-1].UserId, ich denke, die Länge des Slice ist 0, also gerät es in Panik?
Tom10271
@ tom10271 Ja, Sie können das letzte Element eines Slice nicht erhalten, wenn es kein solches Element gibt, dh. wenn es überhaupt keine Elemente gibt.
Toni Cárdenas
-10

Etwas weniger elegant, kann aber auch:

sl[len(sl)-1: len(sl)]
ccdrm
quelle
3
Das ist das gleiche wie sl[len(sl)-1:], aber das gibt ein Slice zurück, das das letzte Element enthält und nicht nur das letzte Element. play.golang.org/p/kcThrqa-64c
Victor