Bagaimana cara mendapatkan elemen terakhir dari slice?

167

Apa cara Go untuk mengekstraksi elemen terakhir dari slice?

var slice []int

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

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

Solusi di atas berfungsi, tetapi tampaknya aneh.

Morgan Wilde
sumber

Jawaban:

297

Untuk hanya membaca elemen terakhir dari sepotong:

sl[len(sl)-1]

Untuk menghapusnya:

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

Lihat halaman ini tentang trik irisan

Toni Cárdenas
sumber
34
Terima kasih banyak! Meskipun kelihatannya konyol mereka tidak menambahkan -1indeks yang Python miliki ...
Morgan Wilde
3
Saya memang suka -1dari Python, meskipun sering menyebabkan kesalahan debug sulit.
weberc2
11
Mereka meninggalkannya di luar dengan sadar. Itu tidak jelas dan rentan terhadap kesalahan. Go keseluruhan adalah berhati-hati tentang 'terlalu banyak makna'; itu juga tidak menampilkan metode / overloading operator, nilai default untuk params fungsi, dll. yang IMHO masuk dalam nada filosofis yang sama. Lihat diskusi ini dan yang lainnya: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas
2
Saya tidak yakin tapi aku panic: runtime error: index out of rangeuntuk profiles[len(profiles)-1].UserId, saya kira panjang slice adalah 0 sehingga panik?
tom10271
@ tom10271 Ya, Anda tidak bisa mendapatkan elemen terakhir dari slice jika tidak ada elemen seperti itu, yaitu. jika tidak ada elemen sama sekali.
Toni Cárdenas
-10

Agak kurang elegan tetapi juga bisa:

sl[len(sl)-1: len(sl)]
ccdrm
sumber
3
Itu sama dengan sl[len(sl)-1:], tapi itu mengembalikan sepotong yang mengandung elemen terakhir, bukan hanya elemen terakhir. play.golang.org/p/kcThrqa-64c
Victor