Все о массивах и слайсах в Go в одном видео

preview_player
Показать описание

Консультации:

Таймкоды:
00:00 - Введение
00:47 - Устройство массивов в Go
01:40 - Работа с массивами в Go
10:00 - Перемещение массива в стеке
11:29 - Итерация по массивам в Go
15:11 - Где аллоцируются массивы в Go
17:22 - Педедача массива в функцию
18:16 - Слайсы в Go
21:34 - Реаллокация слайса в Go
24:45 - Резервирование памяти под слайс
25:44 - Создание слайса без инициализации
27:38 - Модификация строк в Go
28:35 - Приведение слайсов в строки и обратно без копирования
30:13 - Передача слайса в функцию
31:12 - Итерация по слайсам в Go
33:55 - Оптимизация итерации по слайсам в Go
35:42 - Получение слайсов в Go
42:40 - Получение слайса из массива в Go
43:15 - Конвертация слайса в массив в Go
44:15 - Конвертация слайса в указатель на массив в Go
45:02 - Указатель на нулевой массив в Go
46:18 - Удаление из конца слайса в Go
46:51 - Удаление из начала слайса в Go
49:02 - Реализация стека и очереди в Go
50:00 - Как увеличить размер слайса в Go
50:48 - Как уменьшить емкость слайса в Go
54:05 - Где аллоцируются слайсы в Go
59:12 - Как очистить слайс в Go
01:01:51 - В чем разница пустых и нулевых слайсов в Go
01:05:17 - Как сравнивать слайсы в Go
01:07:53 - Как скопировать данные слайса в Go
01:09:47 - Почему функция appeng возвращает слайсв в Go
01:12:39 - Потенциальные проблемы с функцией append в Go
01:14:10 - Реализация функции append в Go
01:15:32 - Утечки памяти при работе со слайсами в Go
01:21:59 - Курс по глубокому Go

Массивы go. Срезы go. Слайсы go. Слайсы под капотом go. Слайсы golang. Массивы golang. Range golang. Массивы го. Язык go курсы. Go язык. Golang уроки. Golang. Утечки памяти golang. Аллокация массивов go. Аллокация слайсов go. Аллокация срезов go. Slice golang. Array golang. Язык go. Язык go уроки. Go lang. Указатели golang. Unsafe golang. Уроки golang. Golang язык программирования. Основы golang. Язык программирования golang. Golang с нуля. Golang slice. Голанг. Array. Slice. Slicing.

#golang #array #slice #slicing
Рекомендации по теме
Комментарии
Автор

Пожалуй лучшее видео про слайсы и массивы в Go на ютубе, даже на англоязычном ютубе ничего такого не видел)

Albert-ncrj
Автор

Владимир, вас очень приятно слушать, разбор темы глубокий, чувствуется интерес и профессионализм, однозначно лайк

Noah-ztsf
Автор

На 46:10 классно было бы напомнить людям о том что у каждой переменной есть тип и значение и len cap лезут в именно в тип

ШамильШайдуллин-зе
Автор

Пожалуй поправлю Маэстро)). На 19:36 все таки при make([]int, 3, 6) будет три элемента в слайсе, т.е. [0, 0, 0]. Капасити все так же 6 элементов. 😊

faustgete
Автор

6:50 «добавляю единичку умножаю на два» звучит так будто другой порядок операций.
Массив не указатель - да, внутри нет указателя, но сам массив это же по сути указатель, и на 6:50 вы как раз работаете с ним как с указателем

cglike
Автор

Теперь мамкины интервьюеры ещё злее будут долбить кандидатов этими слайсами. Спасибо хоть пока дженерики особо не осилили

broninrocks
Автор

34:30 в loopunwinding функции ошибка в цикле вместо len/4 и j++ надо j += 4 иначе не пройдем весь слайс. Скорее даже опечатка))
А видео отличное

mikeofs
Автор

Прекрасное видео по внутреннему устройству языка! Было бы здорово в отдельном видео раскрыть тему хранения данных на стеке и куче, если такого ещё нет на канале.

faustgete
Автор

у нас есть указатель на начало массива, но при этом массив это никакой не указатель область памяти)

Serjc
Автор

При написании своей функции Append на 1:15:15 допущена серьёзная ошибка.
Не учтено, что len(data) может быть больше чем previousLen.
Например: previousLen = 1; cap(slice) = 4; len(data) = 5;
Получим, что newLength = 6 и newLength > cap(slice), функция make создаст newSlice( len=2; cap=2)
В строке 21 получим панику.
Чтобы исправить ошибку, лучше в строке 11 написать:
capacity := newLength + newLength
В функции main (строки 28-36) вместо своей функции Append вызывается стандартная функция append.

ДмитрийВ-чк
Автор

хотелось бы видеть livecoding, на примере какого нить проекта, к примеру web с использованием какого нить фраемворка fiber или gin

sdveng
Автор

Очень даже годно и простым языком с примерами. Буду смотреть твои выпуски.

БогданКоробка-фк
Автор

Язык Golang кажется очень простым, и кажется, что ты уже всё знаешь о нём. Но всё равно он остаётся интересным, и хочется изучать его глубже. Спасибо вам за это!

KranWagen
Автор

Лучший гайд на в ру сигменте, сделай пожалуйста по мапам то же и самое

Go_Dnota
Автор

Владимир, в тесте BenchmarkWithLoopUnwniding вы итерируетесь по четверти массива (зато 4 раза).

IgorAlekseev-xn
Автор

Про range по массивам стоит сказать, что в правой части range массив тоже будет скопирован.
Т.е если range через i, v и в первой итерации меняем последний элемент массива по индексу, то на последней итерации v будет старый.

dlatin
Автор

Владимир, спасибо большое за раскрытие темы! Это очень круто! Ты бы мог прикрепить презентацию с видео?

konstantinfess
Автор

Добрый день, 6:19 Массив это не указатель, 6:35 Уже есть указатель на начало, не стыковка. Возможно, те кто говорил что массив есть указатель, очень хорошо понимают С анд С++, где имя массива хранит в себе адрес первого элемента и то что вы приводите на графике с 6:34 и есть разыменование указателя. Так что да имя массива и есть указатель! Дальше опасаюсь смотреть, потому что докладчик может нести неправдивую информацию.

JIockjoy
Автор

Я не понял: ты говоришь, что массив не является указателем и сразу после говоришь, что массив указывает на начало блока памяти. Объясни, пожалуйста, я запутался. Тайминг: 5:43

РоландДискейн-кй
Автор

Кажется я уже стал Senior Go developer)))

ivanchukayev