¿Cómo obtener el último elemento de una rebanada?

167

¿Cuál es la forma Go para extraer el último elemento de un segmento?

var slice []int

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

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

La solución anterior funciona, pero parece incómoda.

Morgan Wilde
fuente

Respuestas:

297

Por solo leer el último elemento de un segmento:

sl[len(sl)-1]

Para quitarlo:

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

Ver esta página sobre trucos de corte

Toni Cárdenas
fuente
34
¡Gracias un montón! Aunque parezca una tontería, no agregaron el -1índice que Python tiene ...
Morgan Wilde
3
Me gusta el -1de Python, aunque a menudo conduce a errores difíciles de depurar.
weberc2
11
Lo dejaron afuera conscientemente. No era obvio y propenso a errores. Ir en general es circunspecto sobre 'demasiado significado'; tampoco presenta sobrecarga de método / operador, valores predeterminados para parámetros de función, etc., que en mi humilde opinión va en una línea filosófica similar. Vea esta discusión y otras: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas
2
No estoy seguro, pero tengo panic: runtime error: index out of rangepara profiles[len(profiles)-1].UserId, supongo que la longitud de la porción es 0 por lo que entra en pánico?
tom10271
@ tom10271 Sí, no puede obtener el último elemento de un segmento si no existe dicho elemento, es decir. si no hay elementos en absoluto.
Toni Cárdenas
-10

Poco menos elegante pero también puede hacer:

sl[len(sl)-1: len(sl)]
ccdrm
fuente
3
Es lo mismo que sl[len(sl)-1:], pero eso devuelve un segmento que contiene el último elemento, en lugar de solo el último elemento. play.golang.org/p/kcThrqa-64c
Victor