Примеры с реальных Golang собесов 2023: каналы и горутины
ฝัง
- เผยแพร่เมื่อ 1 ก.ค. 2023
- Задачи на channels and goroutines.
Клуб АйТи красавчиков с еженельными созвонами, приватным чатом для подписчиков и уникальным контентом - boosty.to/itkrasavchik
Пример номер 1: goplay.space/#RaCGAY2Vp1a
Пример номер 1 с доп. for-loop горутиной в начале: goplay.space/#unSGmgtIk14
Пример номер 1 с решением: goplay.space/#lRJS0imyS3x
Пример номер 2: goplay.space/#xVWXtJlZgt6
Пример номер 3: goplay.space/#JUS8ntMyR4M
Пример номер 4: goplay.space/#BEu-ikVTLGT
0:07 - пример номер 1
9:42 - пример номер 2
11:17 - пример номер 3
13:09 - пример номер 4
Видео про задачи на append: • Примеры с реальных Gol...
Видео про задачи на change pointer: • Примеры с реальных Gol...
Видео про задачи на typed nil: • Примеры с реальных Gol...
Видео про задачи на loopvar: • Примеры с реальных Gol...
Видео про задачи на GOMAXPROCS и defer: • Примеры с реальных Gol...
Оставить заявку для участия в программе "Процент от ЗП" можно здесь - it-krasavchik.zenclass.ru/ - или на почту - it@krasavchik.club - или в телегу - t.me/itkrasavchik
Клуб АйТи Красавчиков в дискорде - / discord
Уроки просто шикарные!!!
Спасибо, очень интересное и полезное видео
Смутила передача wg по ссылке. Думал там собака порылась. А задачи реально очень интересные
Привет, два года назад смотрел вакансии golang на hh и было всего 250 вакансий сейчас больше 1000+ вот теперь можно изучать golang активно, книги по Go и микросервисам уже купил.
Сейчас уже нужно Rust учить
Вместо range можно модифицировать исходный for
for {
br := false
select {
case v, ok :=
Можно, спасибо, но выглядит довольно сложно в дальнейшей поддержке.
Согласен. Ну это если интервьюеры докопаются)
А что мешает сделать один break для for? "Loop:" перед for и далее "break Loop"
Здравствуйте! Недавно начал изучать Golang, скажите пожалуйста, первую задачу спрашивают у Джунов, Миддлов или Синьеров?
и там, и там может быть
В горутину передается параметр group, а используется внешняя переменная wg. Должно конечно работать и так, но это очевидная ошибка.
Согласен, красавчик!
Хотелось бы добавить по поводу последней задачи. Ещё спрашивают как исправить код, чтобы вывод был через 3 секунды,а не через 6
Есть такое. Если есть готовое решение - велкам )
@@itkrasavchik
package main
import "time"
func worker1() chan int {
ch := make(chan int)
go func() {
time.Sleep(4 * time.Second)
ch
Красавчик! 🔥 Положил на goplay - goplay.space/#mDQJ9FR2eLF :)
Не очень понятно с примером номер#2 с инициализированным каналом, там же по идеи утечка горутин должна произойти. Пишем мы из 3 горутн в цикле for, а читаем только из одной. Но го почему то этого не показывает). Можно скопировать fmt.Println (
две горутины заблокируются до первого (и единственного чтения), потом одна из них успеет записать, вторая останется висеть на попытке записи. Но никакого дедлока тут нет - main подождет 2 секунды и выйдет.
Паники при чтении тоже быть не должно. Если у тебя есть - покажи пример.
@@itkrasavchik да, паники не будет. Получился классический пример утечки горутин под названием "забытый отправитель", прям как когда я девушек на свидание зову). Получается что го будет фаталить ерор о deadlocke , только если заблокируется на чтение/запись в канал main горутина, а на "дочерние" ему плевать
@@alexinAtoRudakov 😂😂😂👍
В этот раз простенькие вышли)
Кому как )
@@itkrasavchik надо просто один раз натрахаться с каналами и селектами, тогда будет простенько)))
Мне такую задачу задавали 🤣 в Авито чтоли
канал блокируется на 14 строке, а не на 15. Это важно понимать. Вот если бы он был с буфером=1, тогда да. Я про cmd.1 пример
func run() {
ch := make(chan string)
go func() {
time.Sleep(time.Second)
fmt.Println("before read 1")
m :=
Блокируется горутина, а не канал ;) и тогда уж на каждой строчке (14 и 15), пока горутина не прочитает из него. Для первого чтения у нее есть время напечатать прочитанное, для второго уже нет.