Изучаем Golang. Урок 3. Основы. Продолжение. Указатели, структуры, массивы и слайсы

preview_player
Показать описание
В этом видео продолжаются базовые знания Golang, такие как: указатели, структуры, массивы и слайсы.
В этой серии уроков мы научимся разрабатывать используя язык Golang. Начнем с азов и закончим полноценным приложением с API, бизнес логикой и базой данных.

С радостью хочу вам представить, что я запускаю курс “Начальная подготовка” по языку Golang. Курс как для совсем начинающих в сфере IT, так и для тех, кто хочет просто изучить язык Go.

Больше обо мне и курсах можно прочитать здесь:

Больше информации есть в ролике на ютубе:

На все вопросы могу ответить в Телеграм группе канала и в личных сообщениях.

Другие видео:

0:00 Intro
0:14 Указатели
6:29 Структуры
15:40 Массивы
19:55 Слайсы
40:40 Outro

#golang #урок #tutorial #голенг #development #howto #learnbasics #coding #programming #изучаемIT #программирование #разработка
Рекомендации по теме
Комментарии
Автор

С радостью хочу вам представить, что я запускаю курс “Начальная подготовка” по языку Golang. Курс как для совсем начинающих в сфере IT, так и для тех, кто хочет просто изучить язык Go.

Курс доступен в 3 вариациях:
1. Онлайн курс с лекциями, заданиями, чатом менторской поддержкой.
2. Полный видеокурс
3. Отдельные блоки с лекциями

Больше обо мне и курсах можно прочитать здесь:

Записаться на курс можно вот тут:

А видео курс тут:

А отдельные блоки с видео тут:

Больше информации есть в ролике на ютубе:

На все вопросы могу ответить в Телеграм группе канала и в личных сообщениях.

TheArtofDevelopment
Автор

Лучшие уроки по Golang во всём рунете!

frontenddeveloper
Автор

Голос, интонация, интрига..как будто читаю приключенческий роман.Приятно, что автор медленно, но верно наращивает мускулы уважаемых любителей го.

nikta
Автор

Перехожу с Python, и если честно мне все нравиться, все понятно с первого раза.

hemenguelbindi
Автор

вот кусок кода из документации, где увеличивается капасити слайса. если кратко сказать что тут описано и почему у тебя увеличивалось на 1, а не в 2 раза: если после аппенда новая длина слайса больше чем два предыдущих капасити, то вернётся капасити, равное новой длине, а не удвоенное от предыдущей. иначе - при переполнении идёт удвоение (или 1.25х для больших слайсов) слайса.😁

func nextslicecap(newLen, oldCap int) int {
newcap := oldCap
doublecap := newcap + newcap
if newLen > doublecap {
return newLen
}

const threshold = 256
if oldCap < threshold {
return doublecap
}
for {
// Transition from growing 2x for small slices
// to growing 1.25x for large slices. This formula
// gives a smooth-ish transition between the two.
newcap += (newcap + 3*threshold) >> 2

// We need to check `newcap >= newLen` and whether `newcap` overflowed.
// newLen is guaranteed to be larger than zero, hence
// when newcap overflows then `uint(newcap) > uint(newLen)`.
// This allows to check for both with the same comparison.
if uint(newcap) >= uint(newLen) {
break
}
}

// Set newcap to the requested cap when
// the newcap calculation overflowed.
if newcap <= 0 {
return newLen
}
return newcap
}

stealme_beats
Автор

Если кратко, то ёмкость слайса - длина массива, который хранит элементы слайса. Попросту говоря это Байты оперативки, выделенные под хранение ваших данных. Оно всегда больше или равно длины слайса.
Сам слайс это указатель на какой-либо из элементов в этом масиве (не оьязательно первый) + длина. Это искуственное ограничение, фактически это отрезок массива, в котором что-то записано. При добавлении в слайс нового элемента слайс увеличит свою длину на 1, пооказывая что кол-во данных в массиве увеличилось на 1, а емкость самого массива не изменится, если её хватало для хранения нового элемента. Если же весь массив был заолнен, то слайс просто выделит новый массив в памяти большей ёмкости (обычно в два раза большей предыдущей ёмкости) и перенесёт все данные туда вместе с новым добавленным элементом. При этом, очевидно, сам слайс не изменит своей длины, т.к. Кол-во данных не изменилось, а только поменяет указатель на начальный элемент, т.к. Массив с данными выделен новый по новому адресу в памяти.

backendblog
Автор

Забавно что автор вроде бы не готовит текст к видео, но все успевает рассказывать и в хорошей смысловой последовательности. Приятно слушать, и еще приятее перенимать новые фишки которые показывает автор. Однозначно продолжать в том же духе. Есть такой канал "Олег Молчанов" он очень подробно порой дотошно в хорошем смысле доносит информацию точными мыслями, этот канал практически на том же уровне на мой взгляд. Касаемо видео про проектирование микросервиса restful api, хотелось бы больше практическйо части, больше кодинга и мыслей автора, так как как рах нехватает данного опыта, хотелось бы поучиться. По данному плейлисту по Golang, спасибо, обновил свои знания.

intmatar
Автор

Спасибо за лекцию! Очень хорошо читаете и объясняете! Проходил недавно один поток под вашим руководством на GB - узнал по стилю речи) Как всегда все четко и понятно, интересно слушать, не засыпаешь)

beaststudio
Автор

Спасибо! Отличная подача, всё очень доходчиво и понятно.

rustam
Автор

Было бы классно если бы ты сделал краткий обзор IDE Goland, настройка, горячие клавиши, ошибки и прочие фишки.
Приятно было бы послушать как он у тебя настроен и что ты используешь в работе.

Shindos-Kopernik
Автор

Спасибо! Мне, как рубисту, очень зашел Go!

CryptoGenetic
Автор

Отличные уроки, информация доносится более доступно, чем на аналогичных каналах!

genbyhi
Автор

Не так часто оставляю комментарий, но щас прям захотелось. Продолжайте в том же духе! Отличная подача, вас интересно и приятно слушать

daniil-shamraev
Автор

Спасибо большое за замечательные уроки!

maximg.
Автор

Продолжай снимать, очень полезные видео с легкой м понятной подачей)

khucheee
Автор

Благодарю за лекцию! Нравится подача материала, желание донести. И у Вас это получается)

mmvofko
Автор

Как всегда на высоте. Жду новых видео!!! П.с. Когда cap меняется в slice происходить relocated memory. Т.е. slice меняет адрес в памяти.

VentelMr
Автор

Очень классно рассказываешь, огромное тебе спасибо за такие подробные уроки. А капасити в двое не увеличивался, потому что ты работал над старой копией, если бы ты еще ниже написал строку с append'оми ввел значений больше чем предыдущий капасити, то он бы удвоил его, надеюсь меня поймут=)

SNT.
Автор

Впервые смотрю обучающие видео на х1, обычно ускоряю. на х2 и даже так бесят. Отличные уроки, супер понятно, и интересно.

andrewkolev
Автор

Теперь рассмотрим, каким образом происходит фактическое увеличение cap:

newcap := old.cap
doublecap := newcap + newcap
if cap > doublecap {
newcap = cap
} else {
if old.len < 1024 {
newcap = doublecap
} else {
// Check 0 < newcap to detect overflow
// and prevent an infinite loop.
for 0 < newcap && newcap < cap {
newcap += newcap / 4
}
// Set newcap to the requested cap when
// the newcap calculation overflowed.
if newcap <= 0 {
newcap = cap
}
}
}
При текущем размере среза менее 1024 элементов, размер памяти увеличивается вдвое (вне зависимости от запрашиваемой cap).

При размере среза > 1024 элементов, срез увеличивается на четверть текущего размера.

Приходим к выводу, что операция вставки в срез имеет серьезные последствия для памяти:

При увеличении cap, массив будет скопирован;
Размер аллоцированной памяти будет расти по своей внутренней логике, лишь отчасти связанной с требуемой cap;
Делаем вывод — чтобы избежать новых аллокаций и копирования, нужно еще при создании среза выставлять большой cap.

В примере ниже мы изменили лишь cap у среза a. Но теперь после вставки в него, копирование не произошло и оба среза даже после вставки ссылаются на один массив:

VakaramGolang