GoLang Slice в деталях, простым языком

2024 ж. 19 Мам.
70 432 Рет қаралды

В этом видео мы разберем Слайсы из языка Go буквально по кусочкам, и я постараюсь объяснить максимально простым языком, как они работают.
Кроме этого, мы разберем различные полезные практики и подводные камни, связанные со слайсами. И закончим тем, что напишем собственную реализацию функции append().
К концу видео вы будете знать о слайсах буквально всё.
----
❤️ Если хотите поддержать развитие канала:
/ tuzov
boosty.to/nikolay.tuzov
👾 Мой канал в Telegram: t.me/ntuzov
🗣 Чат в Telegram: t.me/+zsSZ63wEJDs3NGVi
👀 Golang Digest: t.me/golang_digest - мои регулярные подборки интересных материалов по Go.
----
Полезные ссылки:
Статья о слайсах в блоге авторов Go - go.dev/blog/slices-intro
Go Slice Tricks Cheat Sheet - ueokande.github.io/go-slice-t...
Ещё одна "шпаргалка", текстовая - gist.github.com/GimmyHchs/33b...
Тайм-коды:
00:00 Вступление
01:13 План действия
02:06 Массив (Array)
03:01 Внутреннее устройство слайсов
06:09 Функция append: добавление элементов в слайс
08:09 Функция append: рост базового массива
08:55 Нулевое значение слайса
11:07 Аллокация памяти для слайса
15:12 Передача слайса по значению
21:19 Правильное использование функции append()
23:09 Смотрим исходный код Go: как ведёт себя функция append?
24:43 Маленький слайс и большой базовый массив
27:15 Собственная реализация функции append()
31:51 Заключение
#golang #go

Пікірлер
  • 👾Мой канал в Telegram: t.me/ntuzov Пишу там новости, анонсы своих активностей и просто интересные мысли Также я получаю в нём от вас оперативный фидбэк по роликам - что нравится, что не нравится, какой ролик делать следующим и т.п. ❤ Если у вас есть желание поддержать развитие канала: Секретный телеграм-канал: - В рублях: t.me/+1UPXV_DGnG1mODJi - В евро: t.me/+hedI8LevYTc5MDM6 boosty.to/nikolay.tuzov www.patreon.com/tuzov

    @nikolay_tuzov@nikolay_tuzov Жыл бұрын
    • пожалуйста сделай такой же разбор теории на все темы в Go Твой канал сразу наберет обороты, у тебя получается объяснять очень хорошо, а вот сразу архиваторы и боты писать это уже потом будут смотреть! Теория по основным темам всем по 10 минут на ролик зайдет идеально! сразу подпишусь на патреон если последуешь совету))

      @blackfoxvideo5971@blackfoxvideo5971 Жыл бұрын
    • @@blackfoxvideo5971 это уже в процессе. Завтра как раз будет видео с подробным разбором внутреннего устройства Map. Я тоже решил, что серии практических уроков заходят людям хуже, и собираюсь сосредоточиться на одиночных.

      @nikolay_tuzov@nikolay_tuzov Жыл бұрын
    • Важное уточнение! Слайс может перезаписывать базовый массив, а может и нет. Если сразу добавить append новые элементы, больше, чем капасити, сразу создастся новый участок памяти и перезапишет все элементы. Так базовый массив не изменится. Если добавлять элементы по одному, то сначала перезапишется базовый массив, когда его вместимость закончится, тогда создастся новый массив. В зависимости от количества добавляемых элементов, базовый массив меняется , либо нет.

      @user-name-2598@user-name-2598 Жыл бұрын
    • package main import "fmt" func main() { list := []int{4,5,7,8,3} fmt.Println(double(list)) } func double(nums []int) []int { tips := make([]int, 0, len(nums)) for_, num := range nums { tips = append(tips, num * 2) } return tips } подскажите где ошибка ? при варианте 1 , компилятор ругается: # command-line-arguments ./HelloWorld.go:12:16: syntax error: unexpected range, expecting expression ./HelloWorld.go:16:3: syntax error: non-declaration statement outside function body подскажите Николай я переправирил раз 20 строчка в строчку.. даже на листе выписал 2 вариант вами описаный работает с индексам в цикле и с размером результирующего слайса вместо емкости ( как в 1 варианте) а вот 1 вариант не проходит выкидывая ошибки выше . !? Спасибо

      @stanislavlalazaryan@stanislavlalazaryan6 ай бұрын
    • Кринжеёбище💀💀💀

      @Polaroid64@Polaroid642 ай бұрын
  • Если ты также будешь продолжать все доходчиво разжевывать в Go- тематике, чего сейчас мало на ру сегменте, то однозначно будешь одним из лучших) Спасибо!

    @user-vl3np9ck3v@user-vl3np9ck3v2 жыл бұрын
    • @@artemxeon1654значит ты тройник, даже я понял, а я двойник

      @relaxzone3725@relaxzone3725 Жыл бұрын
    • Из всех, кого слушал, Николай лучший

      @romanmalah@romanmalah6 ай бұрын
  • Наконец то нормальный лектор с внятной полноценной подачей. Жаль, не все темы есть, но заходит оч круто.

    @plan-4D@plan-4DАй бұрын
  • Видео просто шикарно, очень доходчиво и приятная подача материала. Ну и голос тоже очень приятный.

    @user-il8lb3pv7k@user-il8lb3pv7k3 ай бұрын
  • Крутой материал, все по делу без воды, спасибо) Ждем такой же только про map-ы)

    @damir8847@damir88472 жыл бұрын
    • Спасибо) На мой взгляд, мапы в Го чуть менее интересны, но можно совместить это с общим рассказом про хэш-таблицы. Подумаю на эту тему.

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
    • @@nikolay_tuzov хорошая тема)

      @damir8847@damir88472 жыл бұрын
  • Супер,спасибо. Творческих успехов и здоровья 🙏🏻❤️

    @invisibleinvisible83@invisibleinvisible83 Жыл бұрын
  • Идеальный гайд по слайсам, must have для любого новичка. Скинул ссылку на урок всем знакомым, пусть подтягивают слайсы и закрывают пробелы Автору огромное спасибо за труд!

    @gamvdee2519@gamvdee25192 жыл бұрын
  • до чего же подробно и понятно, спасибо большое!

    @retvain@retvain2 жыл бұрын
  • Только недавно начал осваивать go, материал действительно годный, удачи тебе

    @danke7578@danke75782 жыл бұрын
  • Очень интересно. Спасибо что делаешь такой контент. Именно то что я искал

    @mrzlanx5328@mrzlanx5328 Жыл бұрын
  • Стараюсь сейчас изучить каждый аспект, который могут спросить на собеседовании на junior go разработчика. Это видео думаю было идеальным для того чтобы освоить слайсы :))

    @delino3188@delino31882 жыл бұрын
    • как всё прошло ?

      @user-zi5cs9ez8z@user-zi5cs9ez8z Жыл бұрын
  • Очень круто. Люблю Го, очень здорово что кто-то внятно рассказывает о его внутреннем устройстве. Самому трудно во всем разобраться.

    @oleksei3371@oleksei3371 Жыл бұрын
  • Спасибо большое за твою работу! Очень ждем продолжения. В частности практические примеры разработки с деталями - rest api в частности.

    @user-rm5jx8pi4i@user-rm5jx8pi4i2 жыл бұрын
    • Благодарю за добрые слова =)

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
  • Это супер🤩 Про работу с со строками было бы здорово увидеть похожий разбор

    @artmon2004@artmon2004 Жыл бұрын
  • Golang | Slice в деталях, простым языком Спасибо за видео, как раз сейчас изучаю Golang. Практики вообще "бомба" (делал []Type{}). Жду новых видео. Спасибо.

    @vicigneus259@vicigneus2592 жыл бұрын
  • Николай Тузов видео сделано доходчево понятное для понимания спасибо тебе)

    @user-vx8us5hd9p@user-vx8us5hd9p Жыл бұрын
  • Спасибо - отличный материал с кучей подводных сущностей и деталей 👍 Которые были снова мастерски объяснены. Уже небольшая ломка начинается без твоих роликов - пиши исчо! ❤

    @user-pt4iz2py6k@user-pt4iz2py6k Жыл бұрын
  • Отличный разбор! Автору большое спасибо)

    @user-zg7if1pk6k@user-zg7if1pk6k Жыл бұрын
  • Николай, пожалуйста не бросайте нас 😢, жду новых видео или подкастов )

    @user-jx2ne8qq6p@user-jx2ne8qq6p2 ай бұрын
    • Не брошу =) Сейчас занимаюсь большим роликом по планировщику Go, поэтому новых видео нет. За обновлениями можете следить тут: t.me/ntuzov

      @nikolay_tuzov@nikolay_tuzov2 ай бұрын
  • очень крутое объяснение и бестпрактисы. Да если так же будут объяснены интерфейсы, чистая архитектура, мапы будет лучшее не только на ру сегменте.

    @MsAidahar@MsAidahar2 жыл бұрын
    • Спасибо. Про интерфейсы и мапы точно будет, на счёт "чистой архиктуры" пока думаю.

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
  • спасибо за полезные видео, тот случай когда хочется сделать замедление скорости видео, так как количество полезной информации не удается воспринять за один присест)

    @user-kb8ik2mw5q@user-kb8ik2mw5q17 күн бұрын
  • Спасибо Книгу читаю по Go, думал, что ничего нового не узнаю тут, чисто закрепить хотел, а правильное использование append и про маленький слайс и большой слайс - прям круто, спасибо

    @sudobooo@sudobooo Жыл бұрын
  • Шикарное объяснение! Большое спасибо!

    @alexzav1327@alexzav13273 ай бұрын
  • Благодарю за видео. Продолжайте в том же духе, это очень полезно.

    @eleimt@eleimt Жыл бұрын
  • Мне очень зашло.Бро продолжай только не пропадай!!!Господа это like!!!

    @smittychannel3252@smittychannel32522 жыл бұрын
    • Спасибо. Я решил немного отдохнуть, но сейчас у меня в процессе новый ролик - про хэш-таблицы. Он будет в новом формате, на который требуется очень много времени. Ждите =)

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
    • @@nikolay_tuzov ЖДЁМ!!!

      @smittychannel3252@smittychannel32522 жыл бұрын
  • Спасибо за прекрасный материал и отличное объяснение! :)

    @elvirakharunova1589@elvirakharunova15893 ай бұрын
  • Спасибо большое за все эти уроки по ГО. Я очень люблю Low-Level понимание процессов и на каждом видео получил необычайное удовольствие. Этот материал как раз тот, которого мне не хватало чтобы начать работать с ГО. (я не новичок и мне просто не хватало хорошего материала которые разъясняет все эти нюансы) Спасибо-спасибо-спасибо

    @liz2k@liz2k4 ай бұрын
  • Отличный материал, странно что мало комментариев. Николай, поделитесь о создании презентации в ваших видео, какими средствами создаете динамические картинки в ваших уроках, очень интересная подача.

    @user-rn2mi3wy6b@user-rn2mi3wy6b Жыл бұрын
  • Николай, спасибо за подробный обзор! Грамотная речь и четкое понимание материала делает просмотр видео приятным, интересным и понятным с первого раза. Уверен, что это видео поможет многим начинающим гоферам закрыть пробелы, а некоторым и найти новую работу))) Всем удачи на собеседованиях!

    @antonrakov5579@antonrakov55792 жыл бұрын
    • Спасибо! Очень приятно видеть такой фидбэк =)

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
  • посмотрев твои видео, джун будет знать больше чем лид) Работаю 2 года на Го, но как работает под капотом узнал все у тебя. Спасибо тебе большое за видео!

    @user-ic1hl5zj4f@user-ic1hl5zj4f Жыл бұрын
  • Спасибо, Николай!

    @user-tv5pd2pv9q@user-tv5pd2pv9q7 ай бұрын
  • Спасибо, отличный урок

    @a98cb985@a98cb9852 жыл бұрын
  • Очень классное видео, спасибо!

    @fransc6204@fransc6204 Жыл бұрын
  • Респект автору! Удачи каналу.

    @user-zg8ij3kt1h@user-zg8ij3kt1h10 ай бұрын
  • Видео очень полезное, спасибо.

    @mikhaildiesperov2345@mikhaildiesperov2345 Жыл бұрын
  • Полезно. Спасибо!!

    @user-xr9de9gs8p@user-xr9de9gs8p2 жыл бұрын
  • Однозначно лайк!жаль что не все темы по базовому уровню. Знаю что у разработчиков как всегда нет времени,но если вы вдруг запишите курс,Вселенная вас отблагодарит

    @bdud_@bdud_28 күн бұрын
  • Спасибо. Очень понятно

    @_vukivur2164@_vukivur2164 Жыл бұрын
  • Спасибо! Очень полезно

    @user-vt4fr8pu3d@user-vt4fr8pu3d Жыл бұрын
  • было полезно, спасибо!

    @volodya-nrg@volodya-nrg Жыл бұрын
  • Очень познавательно. Спасибо

    @borshchhh@borshchhhАй бұрын
  • спасибо, очень подробно

    @batpyiiikob7245@batpyiiikob72455 ай бұрын
  • Спасибо за годный урок

    @user-fo8zl2xw6z@user-fo8zl2xw6z Жыл бұрын
  • Спасибо за видео! Хотелось бы что то похожее увидеть про горутины и каналы

    @zeronothing9507@zeronothing9507 Жыл бұрын
    • Это обязательно будет

      @nikolay_tuzov@nikolay_tuzov Жыл бұрын
  • Класс!

    @user-dd8nf7dm4j@user-dd8nf7dm4j2 жыл бұрын
  • Хотелось бы в будущем еще увидеть тему про пакеты. Как вообще правильно организовывать файлы и по какому принципу.

    @zeronothing9507@zeronothing9507 Жыл бұрын
    • У меня на канале есть серия уроков про написание Телеграм-бота, там я, в частности, разбираю и правильную организацию проекта (файлы, пакеты и т.п.), подробно это комментирую. То, что ты ищешь как раз.

      @nikolay_tuzov@nikolay_tuzov Жыл бұрын
  • Спасибо за видео! Единственный минус - мне как новичку довольно сложно пока-что понять что-либо после 15ой минуты. Но так вообще все довольно понятно, благодарю!

    @egorpustovit6386@egorpustovit6386 Жыл бұрын
    • Привет. Что сейчас скажешь? Как успехи в изучении? Я только начал, еще 2 недель нет. Информации очень много, но усваивается пока не все..

      @stanleypomogiti8633@stanleypomogiti86338 ай бұрын
    • @@stanleypomogiti8633 привет) Поизучал пару месяцев и пересел на Python + sql + C Через год планирую вернуться в Go

      @egorpustovit6386@egorpustovit63868 ай бұрын
  • Очень хотелось бы от тебя видео по планировщикам и по переключению контекста.

    @RomanAlexandrov@RomanAlexandrov10 ай бұрын
    • Это как раз в работе, скоро будет

      @nikolay_tuzov@nikolay_tuzov10 ай бұрын
  • Отличное видео. Еще бы хороший ролик по чанам и поинтерам.

    @qspor@qspor2 жыл бұрын
    • Спасибо =) По этим темам тоже обязательно будут видео

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
  • годно, а есть видео про Full slice expressions?

    @l7l7l7lful@l7l7l7lful11 ай бұрын
  • Спасибо лайк

    @user-ok9tp5lx6n@user-ok9tp5lx6n Жыл бұрын
  • Мой тысячный лайк )

    @vlad_covers@vlad_covers Жыл бұрын
  • Офигенное видео. Все очень доходчиво. Один момент я бы прояснил чуть подробнее. О том, что если нам гарантированно нужен новый слайс, мы должны делать его через copy(), а не через присвоение. Этот момент сильно важен для тех, кто переходит с других языков, в которых присвоение будет именно созданием полной копией со всеми значениями. И, кстати, возможно вы знаете, почему copy() сделана именно так? Сходу представляется вариант newSlice := copy(slice), который будет возвращать структуру нового созданного слайса. Такая конструкция позволяет сэкономить одну строку кода на объявлении нового слайса и не следить за правильностью инициализации нового слайса (длиной). Конечно, есть костыли в виде append, которые позволяют делать копию в одну строку, но они совсем не очевидны.

    @user-xr5eb5tf5b@user-xr5eb5tf5b Жыл бұрын
    • Хороший вопрос. Так сделано для большей гибкости. К примеру, поищи вызовы функци copy в стандартной библиотеке Go. Далеко не всегда параметры dst слайса будут совпадать с исходным. Например, новый слайс может быть больше исходного (с запасом на какие-то другие элементы). Также ты можешь скопировать два слайса в один новый. И даже больше - ты можешь скопировать конкретный кусочек одного слайса в конкретное место другого: copy(dst[n:m], src[a:b])

      @nikolay_tuzov@nikolay_tuzov Жыл бұрын
    • @@nikolay_tuzov То есть, по сути, copy() предназначена не для копирования слайса, а для копирования значений из одного слайса в другой?

      @user-xr5eb5tf5b@user-xr5eb5tf5b Жыл бұрын
    • @@user-xr5eb5tf5b в общем случае да, именно так. Полное копирование - это частный случай.

      @nikolay_tuzov@nikolay_tuzov Жыл бұрын
    • @@nikolay_tuzov Угу, спасибо. А был ли где-то рассказ про "бест практис"? Как гуру относятся к оберткам над такими функциями как copy() для реализации именно таких частных случаев? Чтобы в одну строку вызывать. Возможно, есть какие-то стандартные библиотеки, в которых это уже реализовано?

      @user-xr5eb5tf5b@user-xr5eb5tf5b Жыл бұрын
    • @@user-xr5eb5tf5b я думаю, в подобных обертках смысла мало. Они разве что сэкономят тебе строчку кода, но только больше запутают коллег. Во всяком случае, я таких обёрток в рабочих проектах не встречал. Кстати, беседы удобней вести в чате, а не в тредах комментов на ютубе =) Если тебе интересно обсуждать подобные вещи, заглядывай в наш чатик: t.me/+WyjmnP6la_QyYjAy

      @nikolay_tuzov@nikolay_tuzov Жыл бұрын
  • Повторюсь, это замечательный урок. Планируется ли что-то подобное про строки? Так как в go, при работе с ними, есть много своих интересных особенностей. )

    @user-xr5eb5tf5b@user-xr5eb5tf5b Жыл бұрын
    • Вполне возможно, запишу на будущее, спасибо =)

      @nikolay_tuzov@nikolay_tuzov Жыл бұрын
  • 5:30 срез начиная с середины массива 7:05 append 8:07 увеличение емкости

    @Anna-ig2fc@Anna-ig2fc4 ай бұрын
  • 27:03 Более красивый вариант с append - он подразумевался таким или нет? :) func findDigits(filename string) []byte { b, _ := os.ReadFile(filename) b = digitRegexp.Find(b) return append(make([]byte, 0, len(b)), b...) }

    @Artem.Alalykin@Artem.Alalykin2 ай бұрын
  • годно

    @Zhdanko@Zhdanko2 жыл бұрын
  • 26:00 Хотя я не пишу на Go пока что, но могу сказать, то что ты предлагаешь в 26:00, все равно файл будет загружаться в память. Для этого и есть стримы (streams) что позволяют читать файл через потоки

    @TimurSevimli@TimurSevimli3 ай бұрын
    • Ого да ты что, какой ты умный. Суть была не в том, что файл в память загружается. Там мог быть и не файл, а что угодно, что возвращает большой массив байтов. Суть в том, что в первой реализации мы возвращаем маленький слайс, который при этом держит ссылку на большой массив байтов, что плохо. И во второй реализации мы избавляемся от этой проблемы.

      @user-mr-m12312@user-mr-m123122 ай бұрын
  • fire

    @TheDavBag@TheDavBag Жыл бұрын
  • спасибо! кстати, тУзов или тузОв?)

    @Hande_hoch@Hande_hochАй бұрын
  • Здравствуйте, спасибо за видео, не могу его просмотреть к сожалению целиком, потому что в моменте возникают вопросы и прошу вашей помощи. на 5:34 вы создаете новый slice с 4 по 7 (не включительно) элемент и у него сразу capacity 9, не совсем понимаю почему так, вы же взяли всего 3 элемента в ваш slice то есть у него и длина должна быть 3 и capacity 3. Или тут нюанс что когда я беру новый slice от какого другого slice то я беру его от индекса элемента что я указал в начале и всегда до конца? Заранее спасибо за ответ!

    @user-ip3hu7bi5q@user-ip3hu7bi5q9 ай бұрын
    • Зря дальше не смотрите, ведь дальше я как раз это и объясняю. Плюс потом мы на практике будем закреплять. Поэтому всегде лучше сначала досмотреть до конца, а потом задавать вопросы. capacity 9 потому, что базовый массив у нас сохранился прежний, и у него ещё есть "запас" по объёму

      @nikolay_tuzov@nikolay_tuzov9 ай бұрын
  • Ребят, какая формула увеличения ёмкости слайса ?

    @user-bd7th4vl5l@user-bd7th4vl5l Жыл бұрын
  • Как происходит обнуление данных во вновь выделенной памяти? Переписываетя каждый байт?

    @xewuss3750@xewuss3750 Жыл бұрын
  • на 17:00 вы объявили переменную _ (нижний прочерк) и сразу выполнили присвоение функции append но при этом перед названием этой переменной _ нет ни слова var или чего то еще. Это что то свойственное go? как это называется?

    @jimshtepa5423@jimshtepa54232 жыл бұрын
    • Здесь этот знак означает присваивание значения "пустой переменной". На самом деле, конкретно здесь его использовать не обязательно, без него код будет работать точно так же. Здесь он полезен только с точки зрения кодстайла - таким образом я демонстрирую явным образом, что функция append что-то возвращает, и я это "что-то" сознательно игнорирую. Если такой знак не использовать, то визуально невозможно отличить подобный случай от того, когда функция ничего не возвращает. Но в некоторых случаях без этого символа вообще не обойтись. Например, когда функция возвращает несколько значений, а нам нужно лишь одно из них. Мы не можем присвоить ненужное значение обычной переменной, т.к. Го обяжет нас эту переменную как-то использовать. Аналогично в циклах - если мы делаем итерации по какому-то списку или мапе, и нам не нужен ключ и значение, то мы присваиваем его "пустой переменной".

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
    • @@nikolay_tuzov вы так ясно объясняете. вообще удивительно, что такое качество образовательного материала, обратной связи и скорости доступно бесплатно. надеюсь для вас в этом есть хоть доля выгоды, может не в виде денег, ну хотя бы умственное или эмоциональное. спасибо еще раз

      @jimshtepa5423@jimshtepa54232 жыл бұрын
    • @@jimshtepa5423 вы всё правильно пишете - это "выгодно" в умственном и эмоциональном плане. Я делаю это на чистом энтузиазме, и очень радуюсь, что людям нравится результат =)

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
  • Можешь сказать, что у тебя шрифт, толстота в ide?

    @ArslanArslan-ph2pz@ArslanArslan-ph2pz2 жыл бұрын
    • Для записи я использую "режим презентации" в GoLand, настройки шрифтов стандартные: View -> Appearance -> Enter Presentation Mode

      @nikolay_tuzov@nikolay_tuzov2 жыл бұрын
  • Очень интересно, но скорость очень быстрая , для новичка трудно не потерять мысль повествования

    @luckytima2315@luckytima231523 күн бұрын
  • По факту это работа с указателями, поймут те кто знает С или ассемблер, но вот интерпретация компилятором Го не совсем понятна. И еще, если объяснять срезы через концепцию указателей, то будет гораздо понятней. Основное отличие массива от указателя, массив определяется ссылкой на область памяти и резервированием области памяти равной объему массива, т.е некий объем памяти постоянно зарезервирован под конкретные данные(жесткая типизация), а указатель это ссылка на объем данных в памяти без резервирования памяти(условно, т.к память ценный ограниченный ресурс) и с произвольной интерпретацией этих данных, для простоты понимания ссылка на буфер и интерпретация данных буфера в зависимости типа полученного сообщения.

    @evgenyvolkov7075@evgenyvolkov70757 ай бұрын
  • Оговорка? 13:34 - не длина, а capacity

    @midway100@midway1008 ай бұрын
  • Примите во внимание что начиная с go 1.18 функция append выделяет память по другому алгоритму

    @UAStriker@UAStriker Жыл бұрын
  • 6:06 Почему slice2 = array[6:9], а не slice2 = myArray[6:9] ?

    @user-zg8ij3kt1h@user-zg8ij3kt1h10 ай бұрын
    • Это опечатка

      @nikolay_tuzov@nikolay_tuzov10 ай бұрын
  • 8:21 Пропал элемент "t", который мы аппендили ранее)

    @user-zg8ij3kt1h@user-zg8ij3kt1h10 ай бұрын
    • ну да, ляпы случаются)

      @nikolay_tuzov@nikolay_tuzov10 ай бұрын
  • Выглядит так как будто в го не хватает более сложной сущности которая при апенде не теряет ссылки.

    @xxxxPomaHxxxx@xxxxPomaHxxxx Жыл бұрын
  • Видео конечно полезное, но язык (go) юмористический, смотрю просто чтобы поржать

    @niklkelbon3662@niklkelbon3662Ай бұрын
  • Я не знаю Го, но судя по синтаксису у тебя ошибки в коде. В цикле удвоения, ты не с элементами входящего среза работаешь, а с индексом цикла, т.е никакого удвоения входных значений не происходит.

    @evgenyvolkov7075@evgenyvolkov70757 ай бұрын
    • Если ты про 12:29, то там всё верно. Стоит познакомиться с синтаксисом Go =) Если в другом месте, то покажи тайминг

      @nikolay_tuzov@nikolay_tuzov7 ай бұрын
    • @@nikolay_tuzov почитал про range и for и пустой идентификатор. Синтаксис получается раздолбайский, в отличие от классических языков и проблема в том что формально цикл работает пока истина, а range таких значений не возвращает, т.е по факту компилятор интерпретирует любое значение кроме пустого как истина. Посмотрел несколько сайтов по Го и нигде этот ньюанс не описан, только пример дан, что вот так вот работает.

      @evgenyvolkov7075@evgenyvolkov70757 ай бұрын
    • @@evgenyvolkov7075 и в чем ньюанс? range работает очевидно: выполняется, пока текущий индекс меньше длины коллекции. Т.е. по факту получается, что ты вначале не разобрался и написал чушь про индекс/элемент, потом почитал сайты, ничего не понял и снова написал чушь.

      @user-mr-m12312@user-mr-m123122 ай бұрын
  • 30 минут смотрел два дня (((

    @annonymous8220@annonymous82202 ай бұрын
  • Удивительно, что создатели го сделали слайс на базе массива. Куда эффективнее было бы использовать для этого связный список Это позволило бы быстро работать с динамически выделяемой память, а - что самое главное! - не копировать каждый раз исходный массив при увеличении capacity Боюсь представить, сколько лишней памяти отжирает операция расширения емкости( Оставляя старый массив на неизвестно какое долгое ожидание сборщика мусора

    @user-ev5ig3jl3k@user-ev5ig3jl3k3 ай бұрын
    • Если бы это был вопрос, то он был бы хорошим. Но я всё равно постарался ответить развёрнуто, в отдельном посте в ТГ-канале: t.me/ntuzov/384 (сори за байт на тг, но там длинные тексты писать и читать сильно проще, чем в комментах ютуба)

      @nikolay_tuzov@nikolay_tuzov3 ай бұрын
    • @@nikolay_tuzov класс! спасибо, пойду читать)

      @user-ev5ig3jl3k@user-ev5ig3jl3k3 ай бұрын
    • @@nikolay_tuzov забавные у вас комментаторы в тг)) ни они, ни вы не учли фразу "на базе (массива/списка)". это не значит, что нужно использовать эти структуры в чистом виде, а лишь говорит о том, как менеджерить эти данные в памяти. лишь один, как видно, опытный программист, подметил, что далеко не обязательно юзать list в чистом виде, можно обмазать это доп структурами, чтобы оптимизировать работу с процом и памятью. вот ответьте сами - в том же ядре linux или в базовой либе языка go каждая структура и алгоритм используются ТОЛЬКО в чистом виде?)) по-моему как раз у вас на канале есть ролик про хэш-мапы, и там объединено несколько подходов, чтобы взять плюсы от каждого подхода хотя, с точки зрения блогерства вы правы, что возвели мои тезисы в абсолют, ведь это принесло вам доп комменты и контент для тг 😁😅

      @user-ev5ig3jl3k@user-ev5ig3jl3k3 ай бұрын
    • Ну это только для тебя удвивительно. Доступ к n-му элементу массива это О(1), а у связного списка - О(n), а обращение к элементу слайса по индексу это достаточно частая операция. Я молчу про всякие оптимизации, когда при обходе массива все его элементы могут загружаться в кеш процессора, что значительно ускоряет обработку, а со связным списком это невозможно. Ладно иметь две реализации слайса (массив + связный список), но иметь одну реализацию только на связном списке это абсурд.

      @user-mr-m12312@user-mr-m123122 ай бұрын
    • @@user-mr-m12312 читайте внимательно. я написал "на базе массива"! это не значит, что нужно только одну структуру внутри использовать! те же хэш-мапы под капотом имеют несколько структур для оптимального хранения, беря плюсы от разных подходов) учите матчасть)

      @user-ev5ig3jl3k@user-ev5ig3jl3k2 ай бұрын
  • Зачем его назвали slice не понятно. Вообще не соответствует функционалу

    @vechnonedovolen666@vechnonedovolen6665 ай бұрын
  • Не надо мне самостоятельная практика. Я за информацией пришел и за идеями лучших реализаций, более глубокого понимания. Если мне надо, я напишу без видосиков и домашних заданий. У меня самостоятельная практика каждый день по 8 часов.

    @mikhaildiesperov2345@mikhaildiesperov2345 Жыл бұрын
    • @World of Fear чел, я учу своих коллег и чему-то учусь сам. Можешь не жалеть их, у них всё хорошо. О себе позаботься.

      @mikhaildiesperov2345@mikhaildiesperov2345 Жыл бұрын
  • Че то какой то стремный язык, почему нельзя было сделать как в других нормальных языках.

    @montecristo31@montecristo31Ай бұрын
  • мда, урок супер, слайсы после других яп - редкостное убожество

    @EvgeniiSuvorov@EvgeniiSuvorov2 ай бұрын
KZhead