Jak zdobyć ostatni element plastra?

167

Jaka jest metoda Go na wyodrębnienie ostatniego elementu plasterka?

var slice []int

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

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

Powyższe rozwiązanie działa, ale wydaje się niezręczne.

Morgan Wilde
źródło

Odpowiedzi:

297

Aby przeczytać tylko ostatni element plasterka:

sl[len(sl)-1]

Aby go usunąć:

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

Zobacz tę stronę o sztuczkach z plastrami

Toni Cárdenas
źródło
34
Wielkie dzięki! Chociaż wydaje się to głupie, nie dodali -1indeksu, który Python ma ...
Morgan Wilde
3
Podoba mi się -1język z Pythona, chociaż często prowadzi to do trudnych do debugowania błędów.
weberc2
11
Świadomie zostawili to na zewnątrz. Było nieoczywiste i podatne na błędy. Ogólnie Go jest ostrożny w kwestii „zbyt dużego znaczenia”; nie zawiera również przeciążenia metody / operatora, wartości domyślnych parametrów funkcji itp., które IMHO podąża w podobnym duchu filozoficznym. Zobacz tę dyskusję i inne: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas
2
Nie jestem pewien, ale mam panic: runtime error: index out of rangedla profiles[len(profiles)-1].UserId, myślę, że długość plastra wynosi 0, więc panikuje?
tom10271
@ tom10271 Tak, nie możesz pobrać ostatniego elementu wycinka, jeśli nie ma takiego elementu, tj. jeśli w ogóle nie ma elementów.
Toni Cárdenas
-10

Nieco mniej elegancki, ale może też:

sl[len(sl)-1: len(sl)]
ccdrm
źródło
3
To to samo co sl[len(sl)-1:], ale zwraca wycinek zawierający ostatni element, a nie tylko ostatni element. play.golang.org/p/kcThrqa-64c
Victor