Почему паники не будет на строке test2 := test1[3:] и почему выведется [4 5]?

В Go срезы (slices) устроены так, что выражение test1[3:] означает взять срез начиная с индекса 3 до конца исходного среза test1. Паники не будет, если индекс 3 не выходит за пределы длины среза.

Короткий ответ

Что ответить на собеседовании

В Go срезы (slices) устроены так, что выражение test1[3:] означает взять срез начиная с индекса 3 до конца исходного среза test1. Паники не будет, если индекс 3 не выходит за пределы длины среза.

Подробный разбор

Ответ с пояснениями

В Go срезы (slices) устроены так, что выражение test1[3:] означает взять срез начиная с индекса 3 до конца исходного среза test1. Паники не будет, если индекс 3 не выходит за пределы длины среза.

Например, если test1 — срез из 5 элементов: [1, 2, 3, 4, 5], то test1[3:] вернёт элементы с индексами 3 и 4, то есть [4, 5].

Паника возникает, если начальный индекс среза больше длины среза, например test1[6:] при длине 5.

Пример:

package main
import "fmt"

func main() {
    test1 := []int{1, 2, 3, 4, 5}
    test2 := test1[3:] // срез с 4-го элемента до конца
    fmt.Println(test2) // выведет [4 5]
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее