Как получить последний элемент среза?


167

Как Go может извлечь последний элемент среза?

var slice []int

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

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

Решение выше работает, но кажется неудобным.

Ответы:


297

Просто для чтения последнего элемента среза:

sl[len(sl)-1]

Для его удаления:

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

Смотрите эту страницу о хитростях срезов


34
Огромное спасибо! Хотя это кажется глупым, они не добавили -1индекс, который есть у Python ...
Морган Уайлд

3
Мне нравится -1Python, хотя это часто приводит к трудным для отладки ошибкам.
weberc2

11
Они оставили это снаружи сознательно. Это было неочевидно и подвержено ошибкам. В общем, осторожность в отношении «слишком большого значения»; он также не содержит перегрузок методов / операторов, значений по умолчанию для параметров функций и т. д., которые, по-моему, сходны с философскими принципами. Смотрите это обсуждение и другие: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Тони Карденас

2
Я не уверен , но я panic: runtime error: index out of rangeза profiles[len(profiles)-1].UserId, я думаю , длина среза составляет 0 так что это паникует?
Tom10271

@ tom10271 Да, вы не можете получить последний элемент слайса, если такого элемента нет, т.е. если нет элементов вообще.
Тони Карденас

-10

Немного менее элегантно, но также может сделать:

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

3
Это то же самое sl[len(sl)-1:], но возвращает срез, содержащий последний элемент, а не только последний элемент. play.golang.org/p/kcThrqa-64c
Виктор,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.