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

Sdílet
Vložit
  • čas přidán 21. 05. 2024
  • В этом видео мы разберем Слайсы из языка 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

Komentáře • 128

  • @nikolay_tuzov
    @nikolay_tuzov  Před rokem +5

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

    • @blackfoxvideo5971
      @blackfoxvideo5971 Před rokem +4

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem +2

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

    • @user-name-2598
      @user-name-2598 Před rokem

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

    • @stanislavlalazaryan
      @stanislavlalazaryan Před 6 měsíci

      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 вариант не проходит выкидывая ошибки выше . !?
      Спасибо

    • @Polaroid64
      @Polaroid64 Před 3 měsíci

      Кринжеёбище💀💀💀

  • @user-vl3np9ck3v
    @user-vl3np9ck3v Před 2 lety +73

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

    • @relaxzone3725
      @relaxzone3725 Před rokem +1

      @@artemxeon1654значит ты тройник, даже я понял, а я двойник

    • @romanmalah
      @romanmalah Před 6 měsíci +1

      Из всех, кого слушал, Николай лучший

  • @plan-4D
    @plan-4D Před měsícem +1

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

  • @user-il8lb3pv7k
    @user-il8lb3pv7k Před 3 měsíci +3

    Видео просто шикарно, очень доходчиво и приятная подача материала. Ну и голос тоже очень приятный.

  • @retvain
    @retvain Před 2 lety +1

    до чего же подробно и понятно, спасибо большое!

  • @invisibleinvisible83
    @invisibleinvisible83 Před rokem

    Супер,спасибо. Творческих успехов и здоровья 🙏🏻❤️

  • @damir8847
    @damir8847 Před 2 lety +10

    Крутой материал, все по делу без воды, спасибо)
    Ждем такой же только про map-ы)

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +6

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

    • @damir8847
      @damir8847 Před 2 lety +3

      @@nikolay_tuzov хорошая тема)

  • @oleksei3371
    @oleksei3371 Před rokem +1

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

  • @gamvdee2519
    @gamvdee2519 Před 2 lety +2

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

  • @mrzlanx5328
    @mrzlanx5328 Před rokem

    Очень интересно. Спасибо что делаешь такой контент. Именно то что я искал

  • @danke7578
    @danke7578 Před 2 lety +4

    Только недавно начал осваивать go, материал действительно годный, удачи тебе

  • @user-zg7if1pk6k
    @user-zg7if1pk6k Před rokem

    Отличный разбор! Автору большое спасибо)

  • @alexzav1327
    @alexzav1327 Před 3 měsíci

    Шикарное объяснение! Большое спасибо!

  • @user-pt4iz2py6k
    @user-pt4iz2py6k Před rokem

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

  • @user-vx8us5hd9p
    @user-vx8us5hd9p Před rokem

    Николай Тузов видео сделано доходчево понятное для понимания спасибо тебе)

  • @elvirakharunova1589
    @elvirakharunova1589 Před 3 měsíci +1

    Спасибо за прекрасный материал и отличное объяснение! :)

  • @vicigneus259
    @vicigneus259 Před 2 lety +4

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

  • @liz2k
    @liz2k Před 4 měsíci

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

  • @user-rm5jx8pi4i
    @user-rm5jx8pi4i Před 2 lety +11

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +5

      Благодарю за добрые слова =)

  • @delino3188
    @delino3188 Před 2 lety +12

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

  • @eleimt
    @eleimt Před rokem

    Благодарю за видео. Продолжайте в том же духе, это очень полезно.

  • @artmon2004
    @artmon2004 Před rokem

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

  • @sudobooo
    @sudobooo Před rokem

    Спасибо
    Книгу читаю по Go, думал, что ничего нового не узнаю тут, чисто закрепить хотел, а правильное использование append и про маленький слайс и большой слайс - прям круто, спасибо

  • @MsAidahar
    @MsAidahar Před 2 lety +11

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +4

      Спасибо. Про интерфейсы и мапы точно будет, на счёт "чистой архиктуры" пока думаю.

  • @smittychannel3252
    @smittychannel3252 Před 2 lety +3

    Мне очень зашло.Бро продолжай только не пропадай!!!Господа это like!!!

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +2

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

    • @smittychannel3252
      @smittychannel3252 Před 2 lety

      @@nikolay_tuzov ЖДЁМ!!!

  • @a98cb985
    @a98cb985 Před 2 lety +1

    Спасибо, отличный урок

  • @fransc6204
    @fransc6204 Před rokem +1

    Очень классное видео, спасибо!

  • @user-tv5pd2pv9q
    @user-tv5pd2pv9q Před 7 měsíci

    Спасибо, Николай!

  • @user-rn2mi3wy6b
    @user-rn2mi3wy6b Před rokem

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

  • @borshchhh
    @borshchhh Před měsícem

    Очень познавательно. Спасибо

  • @antonrakov5579
    @antonrakov5579 Před 2 lety +9

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +1

      Спасибо! Очень приятно видеть такой фидбэк =)

  • @user-zg8ij3kt1h
    @user-zg8ij3kt1h Před 10 měsíci

    Респект автору! Удачи каналу.

  • @user-xr9de9gs8p
    @user-xr9de9gs8p Před 2 lety +1

    Полезно. Спасибо!!

  • @mikhaildiesperov2345
    @mikhaildiesperov2345 Před rokem

    Видео очень полезное, спасибо.

  • @user-kb8ik2mw5q
    @user-kb8ik2mw5q Před 19 dny

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

  • @user-jx2ne8qq6p
    @user-jx2ne8qq6p Před 2 měsíci +1

    Николай, пожалуйста не бросайте нас 😢, жду новых видео или подкастов )

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 měsíci

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

  • @user-ic1hl5zj4f
    @user-ic1hl5zj4f Před rokem

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

  • @user-vt4fr8pu3d
    @user-vt4fr8pu3d Před rokem

    Спасибо! Очень полезно

  • @_vukivur2164
    @_vukivur2164 Před rokem

    Спасибо. Очень понятно

  • @volodya-nrg
    @volodya-nrg Před rokem

    было полезно, спасибо!

  • @batpyiiikob7245
    @batpyiiikob7245 Před 5 měsíci

    спасибо, очень подробно

  • @user-fo8zl2xw6z
    @user-fo8zl2xw6z Před rokem

    Спасибо за годный урок

  • @bdud_
    @bdud_ Před měsícem

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

  • @zeronothing9507
    @zeronothing9507 Před rokem +1

    Спасибо за видео!
    Хотелось бы что то похожее увидеть про горутины и каналы

  • @user-dd8nf7dm4j
    @user-dd8nf7dm4j Před 2 lety +1

    Класс!

  • @zeronothing9507
    @zeronothing9507 Před rokem +1

    Хотелось бы в будущем еще увидеть тему про пакеты. Как вообще правильно организовывать файлы и по какому принципу.

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem +2

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

  • @vlad_covers
    @vlad_covers Před rokem

    Мой тысячный лайк )

  • @qspor
    @qspor Před 2 lety +2

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +2

      Спасибо =) По этим темам тоже обязательно будут видео

  • @l7l7l7lful
    @l7l7l7lful Před 11 měsíci

    годно, а есть видео про Full slice expressions?

  • @RomanAlexandrov
    @RomanAlexandrov Před 10 měsíci +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 10 měsíci

      Это как раз в работе, скоро будет

  • @user-ok9tp5lx6n
    @user-ok9tp5lx6n Před rokem

    Спасибо лайк

  • @user-xr5eb5tf5b
    @user-xr5eb5tf5b Před rokem +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

      Вполне возможно, запишу на будущее, спасибо =)

  • @egorpustovit6386
    @egorpustovit6386 Před rokem +1

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

    • @stanleypomogiti8633
      @stanleypomogiti8633 Před 8 měsíci

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

    • @egorpustovit6386
      @egorpustovit6386 Před 8 měsíci

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

  • @user-xr5eb5tf5b
    @user-xr5eb5tf5b Před rokem +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

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

    • @user-xr5eb5tf5b
      @user-xr5eb5tf5b Před rokem

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

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

    • @user-xr5eb5tf5b
      @user-xr5eb5tf5b Před rokem

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

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

  • @Artem.Alalykin
    @Artem.Alalykin Před 2 měsíci

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

  • @user-bd7th4vl5l
    @user-bd7th4vl5l Před rokem

    Ребят, какая формула увеличения ёмкости слайса ?

  • @Zhdanko
    @Zhdanko Před 2 lety

    годно

  • @xewuss3750
    @xewuss3750 Před rokem

    Как происходит обнуление данных во вновь выделенной памяти?
    Переписываетя каждый байт?

  • @TimurSevimli
    @TimurSevimli Před 3 měsíci

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

    • @user-mr-m12312
      @user-mr-m12312 Před 2 měsíci

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

  • @Anna-ig2fc
    @Anna-ig2fc Před 4 měsíci

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

  • @ArslanArslan-ph2pz
    @ArslanArslan-ph2pz Před 2 lety +3

    Можешь сказать, что у тебя шрифт, толстота в ide?

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +3

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

  • @TheDavBag
    @TheDavBag Před rokem

    fire

  • @jimshtepa5423
    @jimshtepa5423 Před 2 lety +2

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +8

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

    • @jimshtepa5423
      @jimshtepa5423 Před 2 lety +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +6

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

  • @user-ip3hu7bi5q
    @user-ip3hu7bi5q Před 9 měsíci

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 9 měsíci

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

  • @Hande_hoch
    @Hande_hoch Před měsícem

    спасибо! кстати, тУзов или тузОв?)

  • @evgenyvolkov7075
    @evgenyvolkov7075 Před 7 měsíci

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

  • @luckytima2315
    @luckytima2315 Před 25 dny

    Очень интересно, но скорость очень быстрая , для новичка трудно не потерять мысль повествования

  • @UAStriker
    @UAStriker Před rokem +1

    Примите во внимание что начиная с go 1.18 функция append выделяет память по другому алгоритму

  • @user-zg8ij3kt1h
    @user-zg8ij3kt1h Před 10 měsíci

    6:06 Почему slice2 = array[6:9], а не slice2 = myArray[6:9] ?

  • @midway100
    @midway100 Před 8 měsíci

    Оговорка? 13:34 - не длина, а capacity

  • @user-zg8ij3kt1h
    @user-zg8ij3kt1h Před 10 měsíci

    8:21 Пропал элемент "t", который мы аппендили ранее)

    • @nikolay_tuzov
      @nikolay_tuzov  Před 10 měsíci +1

      ну да, ляпы случаются)

  • @xxxxPomaHxxxx
    @xxxxPomaHxxxx Před rokem

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

  • @evgenyvolkov7075
    @evgenyvolkov7075 Před 7 měsíci

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 7 měsíci

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

    • @evgenyvolkov7075
      @evgenyvolkov7075 Před 7 měsíci

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

    • @user-mr-m12312
      @user-mr-m12312 Před 2 měsíci

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

  • @annonymous8220
    @annonymous8220 Před 2 měsíci +1

    30 минут смотрел два дня (((

  • @niklkelbon3662
    @niklkelbon3662 Před měsícem

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

  • @vechnonedovolen666
    @vechnonedovolen666 Před 5 měsíci +1

    Зачем его назвали slice не понятно. Вообще не соответствует функционалу

  • @mikhaildiesperov2345
    @mikhaildiesperov2345 Před rokem

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

    • @mikhaildiesperov2345
      @mikhaildiesperov2345 Před rokem

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

  • @user-ev5ig3jl3k
    @user-ev5ig3jl3k Před 3 měsíci

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

    • @nikolay_tuzov
      @nikolay_tuzov  Před 3 měsíci

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

    • @user-ev5ig3jl3k
      @user-ev5ig3jl3k Před 3 měsíci

      @@nikolay_tuzov класс! спасибо, пойду читать)

    • @user-ev5ig3jl3k
      @user-ev5ig3jl3k Před 3 měsíci

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

    • @user-mr-m12312
      @user-mr-m12312 Před 2 měsíci

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

    • @user-ev5ig3jl3k
      @user-ev5ig3jl3k Před 2 měsíci

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

  • @montecristo31
    @montecristo31 Před měsícem

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

  • @EvgeniiSuvorov
    @EvgeniiSuvorov Před 2 měsíci

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