Telegram Group & Telegram Channel
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



tg-me.com/golang_for_two/57
Create:
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

View MORE
Open in Telegram


🇺🇦 Go на двоих Telegram | DID YOU KNOW?

Date: |

Tata Power whose core business is to generate, transmit and distribute electricity has made no money to investors in the last one decade. That is a big blunder considering it is one of the largest power generation companies in the country. One of the reasons is the company's huge debt levels which stood at ₹43,559 crore at the end of March 2021 compared to the company’s market capitalisation of ₹44,447 crore.

Telegram announces Anonymous Admins

The cloud-based messaging platform is also adding Anonymous Group Admins feature. As per Telegram, this feature is being introduced for safer protests. As per the Telegram blog post, users can “Toggle Remain Anonymous in Admin rights to enable Batman mode. The anonymized admin will be hidden in the list of group members, and their messages in the chat will be signed with the group name, similar to channel posts.”

🇺🇦 Go на двоих from us


Telegram 🇺🇦 Go for two :)
FROM USA