tg-me.com/golang_for_two/57
Last Update:
Note #32 negative slice/array indexes
Уже несколько раз попадается на глаза противоречивое предложение добавить в Go отрицательные индексы как в Python. Те сейчас негативные индексы вызывают панику:
func main() {
a := []int{1, 2, 3}
fmt.Println(a[-1])
}
invalid slice index -1 (index must be non-negative)
А чтобы взять последний элемент slice’а, нужно написать так:
func main() {
a := []int{1, 2, 3}
fmt.Println(a[len(a)-1])
}
В Go 2 было предложено очередной раз добавить:
a := m[-3]
// is equivalent to
a := m[len(m)-3]
Идея не увенчалась успехом, хотя по-мнению автора это добавляет читаемость кода, что довольно спорно.
Но зато в комментариях я нашел другое предложение от Ian Lance Taylor:
> Использовать
len
без скобок для того чтобы получить последний элемент слайса:a := m[len-1]
Эту идею многие поддержали… но пока ни к чему не пришли.
P.S. Касательно
-1
и других языков программирования: хотя и в Python -1
означает len - 1
в контексте индексов списков, в JavaScript -1 всего лишь -1, а в Java - это IndexOutOfBounds. Поэтому с точки зрения читаемости кода len-1 самый понятный. to be continued…
Links:
https://github.com/golang/go/issues/33359
https://github.com/golang/go/issues/16231
https://github.com/golang/go/issues/20176
https://github.com/golang/go/issues/11245
BY 🇺🇦 Go for two :)
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/golang_for_two/57