Разбираем слайсы и массивы простым языком на примерах // Курс «Golang developer. Professional»

YOUTUBE · 01.12.2025 05:47

Ключевые темы и таймкоды

Введение и знакомство

0:00
  • Вебинар посвящен слайсам и массивам в Go.
  • Призыв к активности в чате и вопросам.
  • Просьба представиться и рассказать о своем опыте и целях участия.

О компании OTUS

1:52
  • OTUS - платформа онлайн-образования в IT.
  • Специализируется на продвинутых программах для специалистов с опытом.
  • Быстрое создание курсов по новым технологиям.
  • Образовательная лицензия и программы повышения квалификации.

Курсы и аудитория

2:52
  • Курсы для джуниоров, мидлов, сеньоров и элит.
  • Восемь направлений: программирование, инфраструктура, тестирование, аналитика, дата-сайнс, управление, геймдев и информационная безопасность.
  • Более 130 курсов, 600 преподавателей, 20 тысяч учеников.

Вебинар и его цели

3:52
  • Вебинар продлится около часа-полутора.
  • Призыв к активному участию и задаванию вопросов.
  • Обсуждение массивов, слайсов и их подводных камней.

Представление спикера

4:52
  • Представление инженера-разработчика Сергея Семушкина.
  • Призыв к участникам представиться и рассказать о своих целях.
  • Начало вебинара и обсуждение слайсов и массивов в Go.

Введение в массивы

7:45
  • Массив - это последовательно расположенные элементы в памяти.
  • Размер массива определяется на этапе компиляции и является частью его типа.
  • Массивы в Go используются реже, чем слайсы, но важны для понимания последних.

Объявление и инициализация массивов

8:37
  • Массив объявляется с ключевым словом var и размерностью в квадратных скобках.
  • Массив заполняется дефолтным значением для типа данных.
  • В Go есть два типа int: 32-битный и 64-битный, что влияет на размер массива.

Многомерные массивы

10:22
  • В Go можно создавать многомерные массивы, используя запись с двоеточием.
  • Массивы могут быть инициализированы значениями при объявлении.
  • Компилятор может автоматически вычислить размер массива, если не указано двоеточие.

Операции с массивами

12:22
  • Основные операции: чтение, запись, получение длины массива.
  • Операция получения слайса позволяет конвертировать массив в слайс.

Введение в слайсы

14:07
  • Слайс - это контейнер для работы с массивами переменной длины.
  • Неинициализированный слайс имеет дефолтное значение nil.
  • Инициализация слайса может быть выполнена с помощью литерала слайса или функции make.

Операции со слайсами

16:22
  • Функция make позволяет создать слайс с предустановленными параметрами длины и емкости.
  • Слайсы поддерживают операции чтения, записи и получения длины.

АПИ слайса

17:07
  • АПИ слайса похож на АПИ массивов.
  • Можно читать и писать элементы слайса по индексу.
  • Длина слайса хранится в его структуре.
  • Реслайсинг доступен для слайсов.

Динамическое добавление элементов

18:00
  • Слайсы позволяют динамически добавлять элементы.
  • Функция append добавляет элементы в конец слайса.
  • Можно добавлять элементы из других слайсов и массивов.
  • Слайсы могут быть неинициализированы и заполнены позже.

Преимущества слайсов

19:52
  • Слайсы предпочтительнее массивов в большинстве случаев.
  • Массивы используются, когда известно точное количество элементов.
  • Слайсы обычно находятся на стеке, что улучшает производительность.

Внутреннее устройство слайса

21:52
  • Слайс представляет собой структуру с полями: unsafe pointer, length, capacity.
  • Слайс является оберткой над массивом.
  • Длина слайса регулирует его размерность.
  • Реслайсинг позволяет вырезать часть массива.

unsafe pointer

23:52
  • unsafe pointer позволяет обойти систему типов.
  • Слайс может быть контейнером для разных типов данных.
  • Функция make позволяет инициализировать слайс с длиной и емкостью.

Пример инициализации слайса

25:52
  • Пример инициализации слайса с помощью функции make.
  • Длина слайса и емкость подлежащего массива указываются при инициализации.
  • При добавлении элементов длина слайса увеличивается.

Добавление элементов

27:52
  • При добавлении элементов длина слайса увеличивается.
  • Если места в массиве больше нет, нужно создать новый слайс или массив.

Переадресация данных в слайсах

28:52
  • При добавлении нового элемента в слайс, который превышает его длину, происходит переадресация данных.
  • Инициализируется новый массив, в который копируются данные из старого массива.
  • Старый массив становится мусором и удаляется сборщиком мусора.

Алгоритм увеличения длины слайса

29:52
  • При превышении длины слайса, его длина удваивается до тех пор, пока не достигнет 1024.
  • После 1024 длина увеличивается на четверть, чтобы избежать больших выделений памяти.
  • Старые массивы удаляются сборщиком мусора, если на них нет ссылок.

Подслайсы и их особенности

31:52
  • Подслайсы позволяют создавать новые слайсы, указывающие на часть старого слайса.
  • Новый слайс указывает на часть старого слайса, начиная с указанного индекса.
  • Важно понимать, что все элементы нового слайса будут указывать на один и тот же внутренний массив.

Проблемы с переадресацией данных

34:52
  • Переадресация данных может привести к проблемам, если бизнес-логика зависит от изменения элементов в разных слайсах.
  • При изменении элементов в одном слайсе, это может повлиять на другой слайс, если они указывают на один и тот же массив.
  • Для предотвращения таких проблем, функции должны возвращать новый слайс, а не изменять текущий.

Глубокая копия слайсов

39:37
  • Для создания глубокой копии слайса используется функция copy.
  • Глубокая копия позволяет избежать взаимного влияния между слайсами.
  • Это помогает избежать ошибок и гарантирует корректное поведение бизнес-логики.

Введение и вопросы

40:37
  • Денис извиняется за технические проблемы с микрофоном.
  • Алексей просит дать ему время перевести дух.
  • Денис предлагает задавать вопросы в чате и обещает вернуться к бонусной части.

Курс по Golang

41:37
  • Денис рассказывает о курсе по Golang от OTSUS.
  • Курс включает практические задачи от ведущих компаний.
  • Выпускной проект - самостоятельная разработка микросервиса.

Процесс обучения

42:37
  • Обучение проходит в формате вебинаров.
  • Записи занятий и материалы доступны в личном кабинете.
  • Домашние задания с фидбеком от преподавателей.

Время и результаты курса

43:37
  • Курс занимает от четырех до восьми часов в неделю.
  • Программа обновляется в зависимости от актуальных запросов.
  • Выпускники смогут писать продакшн-код, понимать Golang и создавать микросервисы.

Карьерные перспективы

44:37
  • Анализ вакансий для Golang разработчиков.
  • Зарплаты варьируются от 150 до 450 тысяч рублей.
  • Примеры вакансий и требований к соискателям.

Вопросы и ответы

46:37
  • Руслан задает вопрос о дебаггерах.
  • Алексей объясняет, что devel - де-факто стандарт для Golang.
  • Делф работает хорошо с экстеншн-кодом и конкурентными программами.

Заключение и бонусы

48:37
  • Денис благодарит Алексея за вебинар.
  • Алексей предлагает подписаться на социальные сети OTSUS.
  • Денис анонсирует специальное предложение на курс OTSUS со скидкой.