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

Поділитися
Вставка
  • Опубліковано 20 гру 2024

КОМЕНТАРІ • 142

  • @nikolay_tuzov
    @nikolay_tuzov  2 роки тому +5

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

    • @blackfoxvideo5971
      @blackfoxvideo5971 2 роки тому +5

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +2

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

    • @user-name-2598
      @user-name-2598 Рік тому

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

    • @stanislavlalazaryan
      @stanislavlalazaryan Рік тому

      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 10 місяців тому

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

  • @ВладиславАн-л3х
    @ВладиславАн-л3х 3 роки тому +89

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

    • @relaxzone3725
      @relaxzone3725 Рік тому +1

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

    • @romanmalah
      @romanmalah Рік тому +1

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

    • @alivewel
      @alivewel 4 місяці тому +1

      ванганул))

  • @plan-4D
    @plan-4D 8 місяців тому +5

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

  • @АндрейПрокопович-п3х
    @АндрейПрокопович-п3х 10 місяців тому +3

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

  • @thekiruhan2616
    @thekiruhan2616 5 місяців тому +5

    Николай, спасибо большое за такую годную БЕСПЛАТНУЮ инфу. Круто, когда начинаешь понимать не только работу, но и внутрянку механизма!

  • @damir8847
    @damir8847 3 роки тому +12

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

    • @nikolay_tuzov
      @nikolay_tuzov  3 роки тому +6

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

    • @damir8847
      @damir8847 3 роки тому +3

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

  • @gamvdee2519
    @gamvdee2519 2 роки тому +4

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

  • @vicigneus259
    @vicigneus259 3 роки тому +4

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

  • @antonrakov5579
    @antonrakov5579 2 роки тому +9

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +1

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

  • @liz2k
    @liz2k 11 місяців тому

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

  • @IvanFedulov
    @IvanFedulov 2 місяці тому

    22:26 по мне так самая неочевидная особенность ф-и append. полезно, спасибо

  • @sudobooo
    @sudobooo Рік тому

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

  • @Аудиокниги-г8д
    @Аудиокниги-г8д 3 роки тому +11

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

    • @nikolay_tuzov
      @nikolay_tuzov  3 роки тому +5

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

  • @oleksei3371
    @oleksei3371 2 роки тому +1

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

  • @danke7578
    @danke7578 2 роки тому +4

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

  • @БекнурБеккалиев-д1т

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

  • @АндрейЛысенко-р2ю
    @АндрейЛысенко-р2ю 2 роки тому

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

  • @retvain
    @retvain 2 роки тому +2

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

  • @elvirakharunova1589
    @elvirakharunova1589 10 місяців тому +1

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

  • @MsAidahar
    @MsAidahar 3 роки тому +11

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

    • @nikolay_tuzov
      @nikolay_tuzov  3 роки тому +4

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

  • @Anna-ig2fc
    @Anna-ig2fc 11 місяців тому

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

  • @smittychannel3252
    @smittychannel3252 2 роки тому +3

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +2

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

    • @smittychannel3252
      @smittychannel3252 2 роки тому

      @@nikolay_tuzov ЖДЁМ!!!

  • @last2636
    @last2636 4 місяці тому

    Огненный видос, спасибо за твою работу)

  • @alexzav1327
    @alexzav1327 10 місяців тому

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

  • @АлександрМарков-э2б
    @АлександрМарков-э2б 2 місяці тому

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

  • @ВладРоманов-ю8л
    @ВладРоманов-ю8л 9 місяців тому +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  9 місяців тому

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

  • @shyrops
    @shyrops 2 роки тому

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

  • @АлександрИноземцев-и4х

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

  • @some_user_880
    @some_user_880 2 місяці тому

    Спасибо
    Классный урок!

  • @fransc6204
    @fransc6204 Рік тому +1

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

  • @ЕвгенийУгожаев-ь7и
    @ЕвгенийУгожаев-ь7и 2 роки тому +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому

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

    • @ЕвгенийУгожаев-ь7и
      @ЕвгенийУгожаев-ь7и 2 роки тому

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому

      @@ЕвгенийУгожаев-ь7и в общем случае да, именно так. Полное копирование - это частный случай.

    • @ЕвгенийУгожаев-ь7и
      @ЕвгенийУгожаев-ь7и 2 роки тому

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому

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

  • @denis_hromov
    @denis_hromov 2 роки тому

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

  • @ТимофейЁлкин-о9е

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

  • @eleimt
    @eleimt 2 роки тому

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

  • @a98cb985
    @a98cb985 2 роки тому +1

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

  • @АлексейЧернов-щ8д

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

  • @tgffvvvgtt34543
    @tgffvvvgtt34543 Рік тому

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

  • @delino3188
    @delino3188 3 роки тому +12

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

  • @ВикторАнатольевич-е1с

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

  • @egorpustovit6386
    @egorpustovit6386 2 роки тому +1

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

    • @stanleypomogiti8633
      @stanleypomogiti8633 Рік тому

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

    • @egorpustovit6386
      @egorpustovit6386 Рік тому

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

  • @qspor
    @qspor 2 роки тому +2

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +2

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

  • @zeronothing9507
    @zeronothing9507 2 роки тому +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +1

      Это обязательно будет

  • @TimurSevimli
    @TimurSevimli 10 місяців тому

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

    • @user-mr-m12312
      @user-mr-m12312 9 місяців тому

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

  • @invisibleinvisible83
    @invisibleinvisible83 2 роки тому

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

  • @zeronothing9507
    @zeronothing9507 2 роки тому +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +2

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

  • @mikhaildiesperov2345
    @mikhaildiesperov2345 2 роки тому

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

  • @artmon2004
    @artmon2004 Рік тому

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

  • @Artem.Alalykin
    @Artem.Alalykin 9 місяців тому

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

    • @fiesta86m
      @fiesta86m 5 місяців тому

      Мне кажется что вариант с копированием слайса будет лучше и читабельней :d

  • @borshchhh
    @borshchhh 9 місяців тому

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

  • @RomanAlexandrov
    @RomanAlexandrov Рік тому +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  Рік тому

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

  • @СергейПолховский-ь7д

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

  • @_vukivur2164
    @_vukivur2164 Рік тому

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

  • @Эльнур-р8ю
    @Эльнур-р8ю 2 роки тому

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

  • @volodya-nrg
    @volodya-nrg Рік тому

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

  • @МаксимМалофеев-п3ы

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

  • @treinado3967
    @treinado3967 2 місяці тому

    Parabéns pelo vídeo

  • @evgenyvolkov7075
    @evgenyvolkov7075 Рік тому

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

  • @ЕвгенийУгожаев-ь7и
    @ЕвгенийУгожаев-ь7и 2 роки тому +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому

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

  • @ДаниилКуликов-о7ш
    @ДаниилКуликов-о7ш 6 місяців тому

    У меня получилось так. Не сказать, что ваириант более красивый, с copy вариант как по мне более понятный при чтении
    func FindDigits(filename string) []byte {
    b, _ := os.ReadFile(filename)
    b = digitRegexp.Find(b)
    return append([]byte{}, b...)
    }

  • @jimshtepa5423
    @jimshtepa5423 2 роки тому +2

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +8

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

    • @jimshtepa5423
      @jimshtepa5423 2 роки тому +1

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

    • @nikolay_tuzov
      @nikolay_tuzov  2 роки тому +6

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

  • @luckytima2315
    @luckytima2315 7 місяців тому +1

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

  • @ДаниилКуликов-о7ш
    @ДаниилКуликов-о7ш 6 місяців тому

    Заодно попробовал написать Append для добавления нескольких элементов, если кому интересно, как это может выглядеть:
    func Append(slice []int, el ...int) []int {
    var res []int
    resLen := len(slice) + len(el)
    if resLen

  • @alexandersmirnov4274
    @alexandersmirnov4274 6 місяців тому

    func double(nums []int) (res []int) {
    res = nums[:]
    for i := range len(res) {
    res[i] *= 2
    }
    return
    }

  • @ArslanArslan-ph2pz
    @ArslanArslan-ph2pz 3 роки тому +3

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

    • @nikolay_tuzov
      @nikolay_tuzov  3 роки тому +3

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

  • @l7l7l7lful
    @l7l7l7lful Рік тому

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

  • @PersonProMax
    @PersonProMax 5 місяців тому

    здраствуйте, есть ои у вас на канале уроки по учению Golang? что то я не нашел

  • @August23AnatoliiAugust23Anatol

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

    • @nikolay_tuzov
      @nikolay_tuzov  Рік тому

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

  • @vlad_covers
    @vlad_covers 2 роки тому

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

  • @ТимофейЁлкин-о9е

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

  • @СергійРимар-и5й
    @СергійРимар-и5й 2 роки тому +1

    Класс!

  • @xewuss3750
    @xewuss3750 Рік тому

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

  • @ЗайцевИгорь-ы9я
    @ЗайцевИгорь-ы9я 6 місяців тому

    Спасибо!
    Зачем размер только в make не пони, мне лично капасити интересно только )

  • @Hande_hoch
    @Hande_hoch 8 місяців тому

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

  • @ИгорьФруткин
    @ИгорьФруткин Рік тому

    Спасибо лайк

  • @UAStriker
    @UAStriker 2 роки тому +2

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

  • @ГригорийАрхипов-у6й

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

  • @midway100
    @midway100 Рік тому

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

  • @ТимофейЁлкин-о9е

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

  • @Zhdanko
    @Zhdanko 2 роки тому

    годно

  • @annonymous8220
    @annonymous8220 9 місяців тому +5

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

  • @TheDavBag
    @TheDavBag 2 роки тому

    fire

  • @xxxxPomaHxxxx
    @xxxxPomaHxxxx Рік тому

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

  • @vechnonedovolen666
    @vechnonedovolen666 Рік тому +2

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

  • @evgenyvolkov7075
    @evgenyvolkov7075 Рік тому

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

    • @nikolay_tuzov
      @nikolay_tuzov  Рік тому

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

    • @evgenyvolkov7075
      @evgenyvolkov7075 Рік тому

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

    • @user-mr-m12312
      @user-mr-m12312 9 місяців тому +1

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

  • @niklkelbon3662
    @niklkelbon3662 8 місяців тому

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

  • @ЕвгенийКартман-о2п
    @ЕвгенийКартман-о2п 10 місяців тому

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

    • @nikolay_tuzov
      @nikolay_tuzov  10 місяців тому

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

    • @ЕвгенийКартман-о2п
      @ЕвгенийКартман-о2п 10 місяців тому

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

    • @ЕвгенийКартман-о2п
      @ЕвгенийКартман-о2п 10 місяців тому

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

    • @user-mr-m12312
      @user-mr-m12312 9 місяців тому

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

    • @ЕвгенийКартман-о2п
      @ЕвгенийКартман-о2п 9 місяців тому

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

  • @mikhaildiesperov2345
    @mikhaildiesperov2345 2 роки тому

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

    • @mikhaildiesperov2345
      @mikhaildiesperov2345 Рік тому

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

  • @montecristo31
    @montecristo31 8 місяців тому

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

  • @EvgeniiSuvorov
    @EvgeniiSuvorov 9 місяців тому

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

  • @yungasake8018
    @yungasake8018 3 місяці тому

    я нихуя не понимаю

  • @sergeykosovsky7005
    @sergeykosovsky7005 5 місяців тому

    Не смог повторить пример
    func findDigits(filename string) []byte {
    digitRegexp := regexp.MustCompile("[0-9]+")
    bytes, err := os.ReadFile(filename)
    if err != nil {
    log.Println(err)
    }
    return digitRegexp.Find(bytes)
    }
    Сделал файл с таким содержанием "12345 dfdf 123454"
    Запускаю
    digits := findDigits("test.txt")
    log.Println(len(digits), cap(digits), string(digits)) // 5 5 12345
    Т.е. нет такого что мы будем тянуть за собой весь файл... или есть какой-то способ так сделать?

    • @fr11nikaka63
      @fr11nikaka63 5 місяців тому

      походу за 2 года был фикс

  • @batpyiiikob7245
    @batpyiiikob7245 Рік тому

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