Шаг 47.
Язык программирования Go.
Индексирование срезов и извлечение срезов из срезов

    На этом шаге рассмотрим индексирование срезов и извлечение срезов из срезов в Go.

    Срез – это ссылка на скрытый массив. И срез, извлеченный из среза, ссылается на тот же самый скрытый массив. Рассмотрим поясняющий пример:

s := []string{"0", "1", "2", "3", "4", "5", "6", "7"}
t := s[2:6]
fmt.Println(t, s, "=", s[:4], "+", s[4:])
s[3] = "x"
t[len(t)-1] = "y"
fmt.Println(t, s, "=", s[:4], "+", s[4:])

    Архив примера можно взять здесь.

    Результат работы программы представлен на рисунке 1.


Рис.1. Результат работы программы

    При изменении данных посредством оригинальной переменной s или переменной t, полученной в результате извлечения среза из среза, изменяются одни и те же данные в памяти, то есть изменения затрагивают оба среза. Данный фрагмент также демонстрирует, что для данного среза s и индекса i (0 ≤ i ≤ len(s)) срез s равен конкатенации срезов s[:i] и s[i:].

    На рис. 2 показан срез s, включая все допустимые позиции, и срезы, извлекаемые в фрагменте программного кода. Нумерация позиций в любом срезе начинается с 0, а последний элемент среза всегда имеет индекс len(s) - 1.


Рис.1. Устройство среза

    На следующем шаге рассмотрим итерации по срезам в Go.


Предыдущий шаг Содержание Следующий шаг