СЛАЙСЫ и МАССИВЫ golang (ЗАЧЕМ это сделали?)

Golang слайсы(slice) и golang массивы(array). Этот урок о слайсах и массивах в языке программирования golang. Мы изучим, что такое слайсы, массивы и зачем они нужны. Как доставать элементы по индексу, а также менять их через индекс. Что такое длина(lenght) и вместимость, емкость(capacity) слайса и массива. А также, что происходит при вызове функции append, как при этом меняется длина и вместимость, емкость. Как создавать слайсы через функцию make. В конце видео мы научимся быстро создавать срезы из слайсов из 3 индексов, границ.
🚨t.me/gopher_land - комьюнити, дз, курс golang и backend разработки🚨

Пікірлер: 20

  • @gopher_land
    @gopher_land28 күн бұрын

    🚨Комьюнити, дз, курс golang и backend разработки - t.me/gopher_land 🚨

  • @davdev05
    @davdev0511 күн бұрын

    Крутой монтаж, крутые превью, крутая подача, где лайки? Где просмотры? Надеюсь придут, а то несправедливо, удачи каналу в развитии, жду про параллелизм и конкурентность)

  • @user-nx5pk3xx4m
    @user-nx5pk3xx4m28 күн бұрын

    Спасибо за новый ролик, лучший ютуб канал)

  • @Allsee77
    @Allsee7720 күн бұрын

    Супер канал, не забрасывай!

  • @Onebeardedmarketeur
    @Onebeardedmarketeur28 күн бұрын

    Класс, понятно

  • @saitaro
    @saitaro24 күн бұрын

    Супер, продолжай!

  • @YaHoo4598
    @YaHoo459819 күн бұрын

    Ответ в конце видео, eсли кому-то интересно. При s2[0:2] мы получаем урезанный массив, но элементы внутри массива имеют те же ссылки (или адреса, кому как удобнее) в памяти, что и у элементов исходного массива. В итоге мы получаем массив длиной равной 2, а вместимость как у исходного массива, то есть вместимость равна 5, и получается такой массив [73, 98, пусто, пусто, пусто]. Когда отрабатывает данная строчка кода --> s2 = append(s2, 444), мы в конец урезанного массива добавляем значение 444, НО!! это значение добавляется в пустую ячейку урезанного массива, а сама эта пустая ячейка, как я писал выше, имеет ту же ссылку(адрес), что и ячейка хранящиеся под данным индексом у исходного массива, то есть при изменении этой ячейки в урезанном массиве мы также затронем данную ячейку у исходного массива. Таким образом, урезанный массив будет выглядеть так --> [73, 98, 444, пусто, пусто], а исходный так --> [73, 98, 444, 61, 96]. Во втором же случае, когда мы используем s2[0:2:2], мы ограничиваем вместимость урезанного массива до двух и получается такой массив --> [73, 98], НООО!! эти два элемента все еще имеют ссылку(адрес) на элементы исходного массива. Весь прикол происходит при использовании append, он просто создает копию массива и добавляет некое кол-во пустых ячеек, если вместимости не хватает, об этом как раз таки говорилось в этом видео. Итог, у нас получится новый массив с элементами, у которых свои ссылки(адреса) --> [73, 98, 444, некое кол-во пустых ячеек созданных заранее для оптимизации]. Надеюсь понятно расписал, а если кто-то не понял, то посмотрите видео про указатели. Я вот на JavaScript (TypeScript) уже сижу почти три года и работаю Фронтом на React, но решил поизучать гошку ради интереса, т.к захотелось чего-то новенького. Отличная и интересная подача материала, продолжай в том же дуxe и удачи в развитии канала)

  • @nnnabbot
    @nnnabbot27 күн бұрын

    Когда мы создали s2 - мы создали получается ещё одну ссылку на исходный массив ? Если да , то как создать не ссылку а реально новый массив из исходного ?

  • @gopher_land

    @gopher_land

    27 күн бұрын

    1. Да 2. Слайс - это всегда ссылка. Но чтобы сделать их независимым и s2 работал с копией s := []int{1, 2, 3, 4, 5} s2 := make([]int, 5, 5) copy(s2, s) s2[0] = 555 fmt.Println(s, s2)

  • @nnnabbot

    @nnnabbot

    27 күн бұрын

    @@gopher_land благодарю. Очень приятно что ответили. Запишу себе в блокнот комбинацию. Уж не знаю понадобится вообще когда нибудь делать независимую копию )) но лучше записать ))

  • @alwayze
    @alwayze28 күн бұрын

    Я могу ответить на задачку в конце. Дело в том, что слайс по сути - это указатель на низлежащий массив. Из этого можно понять, что когда мы создаем слайс s2, то по факту мы передаем в него указатель от низлежащего массива. И если мы меняем s2, то мы меняем сам низлежащий массив, на который ссылается s1. Все правильно?

  • @gopher_land

    @gopher_land

    28 күн бұрын

    Нет, тк s[0:2:2] тоже на него ссылается, можешь сразу после 8 строчки написать s2[0] = 1 и изначальный слайс также поменяется. Или можешь у каждого слайса взять указатель от элемента с индексом 0 они будут одинаковые

  • @user-qe6ef5xb6g
    @user-qe6ef5xb6g28 күн бұрын

    Очень интересно, но ничего не понятно...

  • @gopher_land

    @gopher_land

    28 күн бұрын

    Смотрели предыдущие видео?

  • @Alex_Krivonogov
    @Alex_Krivonogov27 күн бұрын

    Ну и напридумывают же названий. В c++ это вектором обычным именуется и работант почти так же. Зачем ещё названия выдумывать?

  • @awwarez

    @awwarez

    27 күн бұрын

    Потому что это не c++. И вектор в первую очередь намекает на "направление", а лишь затем на "кортеж данных". В любом случае что slice что vector это не удачное название для динамического массива.

  • @user-nn3km7iq2h
    @user-nn3km7iq2h28 күн бұрын

    никуя не понятно

  • @gopher_land

    @gopher_land

    28 күн бұрын

    Смотрели предыдущие видео?

  • @user-nn3km7iq2h

    @user-nn3km7iq2h

    28 күн бұрын

    @@gopher_land ответ в предыдущих видео ? ))

  • @gopher_land

    @gopher_land

    28 күн бұрын

    @@user-nn3km7iq2h видео нужно смотреть по порядку, тк знания из одного видео важны в другом

Келесі