Брат, пожалуйста, не оставляй канал. Просмотры придут. У тебя лучшие ролики, что я только находил: самое понятное и лаконичное объяснение, крутейший визуал. Представляю, сколько сил и времени на это уходит. Может, забабахать бусти, с удовольствием поддержу рублём
Ответ в конце видео, 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 и удачи в развитии канала)
Еще в дополнение. Вместимость считается от индекса среза s2 , т.е. в данном случае s2[0:2] вместимость считается с 0 и равна 5. Если указать s2[1:2] счет будет с индекса 1 и вместимость уже будет равна 4. Как и сказано выше это связано потому что урезанный массив ссылается на основной и индексы до начального не входят в этот интервал
Крутой монтаж, крутые превью, крутая подача, где лайки? Где просмотры? Надеюсь придут, а то несправедливо, удачи каналу в развитии, жду про параллелизм и конкурентность)
Для тех кто не состоит в его тг, он там писал 24 сентября, что он начал проходить месячный курс по System Design, поэтому я думаю возможно после 24 октября стоит ждать новых видео
Когда мы создали s2 - мы создали получается ещё одну ссылку на исходный массив ? Если да , то как создать не ссылку а реально новый массив из исходного ?
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)
@@gopher_land благодарю. Очень приятно что ответили. Запишу себе в блокнот комбинацию. Уж не знаю понадобится вообще когда нибудь делать независимую копию )) но лучше записать ))
Я могу ответить на задачку в конце. Дело в том, что слайс по сути - это указатель на низлежащий массив. Из этого можно понять, что когда мы создаем слайс s2, то по факту мы передаем в него указатель от низлежащего массива. И если мы меняем s2, то мы меняем сам низлежащий массив, на который ссылается s1. Все правильно?
Нет, тк s[0:2:2] тоже на него ссылается, можешь сразу после 8 строчки написать s2[0] = 1 и изначальный слайс также поменяется. Или можешь у каждого слайса взять указатель от элемента с индексом 0 они будут одинаковые
Потому что это не c++. И вектор в первую очередь намекает на "направление", а лишь затем на "кортеж данных". В любом случае что slice что vector это не удачное название для динамического массива.
По поводу конца видео: Когла мы указываем границу и добавялем 444 мы уже работаем с другим массивом данных. А если убрать границу, мы работаем с мервым массивом, потому что капасити у него 5.
🚨Комьюнити, дз, курс golang и backend разработки - t.me/gopher_land 🚨
Брат, не забрасывай канал, уже давно не было роликов. У тебя отличная подача и хороший монтаж, объясняешь все супер понятно!
Брат, пожалуйста, не оставляй канал. Просмотры придут. У тебя лучшие ролики, что я только находил: самое понятное и лаконичное объяснение, крутейший визуал. Представляю, сколько сил и времени на это уходит. Может, забабахать бусти, с удовольствием поддержу рублём
Ответ в конце видео, 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 и удачи в развитии канала)
Еще в дополнение. Вместимость считается от индекса среза s2 , т.е. в данном случае s2[0:2] вместимость считается с 0 и равна 5. Если указать s2[1:2] счет будет с индекса 1 и вместимость уже будет равна 4. Как и сказано выше это связано потому что урезанный массив ссылается на основной и индексы до начального не входят в этот интервал
Крутой монтаж, крутые превью, крутая подача, где лайки? Где просмотры? Надеюсь придут, а то несправедливо, удачи каналу в развитии, жду про параллелизм и конкурентность)
Зря забросил, оч круто !
Спасибо за новый ролик, лучший ютуб канал)
Супер канал, не забрасывай!
спасибо большое!
Класс, понятно
Для тех кто не состоит в его тг, он там писал 24 сентября, что он начал проходить месячный курс по System Design, поэтому я думаю возможно после 24 октября стоит ждать новых видео
Супер, продолжай!
Продалжай в том же духе, подписался жду новые видео!
больше роликов!!!!!
Будет ли продолжение ?
привет, сделай пж норм гайд на час два чтобы было понятно, ты хорошо объясняет, а другие бьют много воды и плохо объясняют
Он проводит платные курсы. В каждом ролике он делает рекламу своих курсов которая начинается со слов "если вы цените свое время..."
Эхх,возвращайся скорее
200 лайков собраны, очень ждем продолжения! (поддержите коммент лайками)
Когда мы создали s2 - мы создали получается ещё одну ссылку на исходный массив ? Если да , то как создать не ссылку а реально новый массив из исходного ?
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)
@@gopher_land благодарю. Очень приятно что ответили. Запишу себе в блокнот комбинацию. Уж не знаю понадобится вообще когда нибудь делать независимую копию )) но лучше записать ))
Друган, ты куда пропал?(
Я могу ответить на задачку в конце.
Дело в том, что слайс по сути - это указатель на низлежащий массив. Из этого можно понять, что когда мы создаем слайс s2, то по факту мы передаем в него указатель от низлежащего массива. И если мы меняем s2, то мы меняем сам низлежащий массив, на который ссылается s1. Все правильно?
Нет, тк s[0:2:2] тоже на него ссылается, можешь сразу после 8 строчки написать s2[0] = 1 и изначальный слайс также поменяется. Или можешь у каждого слайса взять указатель от элемента с индексом 0 они будут одинаковые
Где новые видео с разжевыванием ??😢
Дядь, сделай видео про oi, os, bufio, path, encodind\csv. на Русскоязычном ютубе нет видео вообще
ждём видео, 200 лайков есть
Когда новый ролик?
Ну и напридумывают же названий. В c++ это вектором обычным именуется и работант почти так же. Зачем ещё названия выдумывать?
Потому что это не c++. И вектор в первую очередь намекает на "направление", а лишь затем на "кортеж данных". В любом случае что slice что vector это не удачное название для динамического массива.
Очень интересно, но ничего не понятно...
Смотрели предыдущие видео?
никуя не понятно
Смотрели предыдущие видео?
@@gopher_land ответ в предыдущих видео ? ))
@@ДмитрийАганасЯн видео нужно смотреть по порядку, тк знания из одного видео важны в другом
По поводу конца видео:
Когла мы указываем границу и добавялем 444 мы уже работаем с другим массивом данных.
А если убрать границу, мы работаем с мервым массивом, потому что капасити у него 5.