Примеры с реальных Golang собесов 2023: loopvar
ฝัง
- เผยแพร่เมื่อ 22 ส.ค. 2024
- Задачи на loop variable.
Клуб АйТи красавчиков с еженельными созвонами, приватным чатом для подписчиков и уникальным контентом - boosty.to/itkr...
Пример номер 1: goplay.space/#...
Пример номер 2: goplay.space/#...
Пример номер 3: goplay.space/#...
Common Mistakes Wiki page: github.com/gol...
LoopvarExperiment: github.com/gol...
Видео про задачи на append: • Примеры с реальных Gol...
Видео про задачи на change pointer: • Примеры с реальных Gol...
Видео про задачи на typed nil: • Примеры с реальных Gol...
Видео про задачи на каналы и горутины: • Примеры с реальных Gol...
Видео про задачи на GOMAXPROCS и defer: • Примеры с реальных Gol...
Оставить заявку для участия в программе "Процент от ЗП" можно здесь - it-krasavchik.... - или на почту - it@krasavchik.club - или в телегу - t.me/itkrasavchik
Клуб АйТи Красавчиков в дискорде - / discord
Кстати,
Previously, the variables declared by a "for" loop were created once and updated by each iteration. In Go 1.22, each iteration of the loop creates new variables, to avoid accidental sharing bugs.
Да, но не все еще перешли, я думаю.
Я б накинул еще задачки на тему escape analysis.
По сниппету рассказать, какие переменные уходят на кучу, например, и почему.
И как избавиться от этого.
Да вот как-то не дают примеры на это дело. Спрашивают про принципы и как проверить (gcflags "-m"), но без задач.
Тут кстати не совсем очевидный момент в первой задаче. Почему именно выводится пять пятерок, а не пять четверок. Ведь по идее i заканчивается на 4. У меня это отдельно спрашивали. Ведь когда надо исправить вывод, i идет от 0 до 4. А в целом очень крутой контент Евгений)
спасибо ) счетчик сначала увеличивается, а потом делается выход из цикла после проверки условия
@@itkrasavchik Да, верно конечно) цикл состоит из трех частей - init(работает до итерации), condition(проверяется до итерации) и post(срабатывает после итерации). Вот post у нас отрабатывает. И i=5. Если кому то нужно прям из документации)) От меня просили именно такой ответ. Коллегам на будущее) Всем побольше проходных собесов)
Я бы просто sleep(i) поставил внутри каждой горутины. Горутину все равно стопать придётся. Вопрос только какие накладные расходы, если слипом)
а еще значения в слайс можно запихать и потом поочередно вывести)
Слайс не безопасен для аппенда из горутин 😉
Все сложнее и сложнее :)
Спасибо за панику :D
То ли еще будет )
для участия в программе "процент от зп" нужно знать английский?
Нет
А настоящий синьор (помидор) ещё узнаёт скольки ядерная у нас система и gomaxproc выставит))
Каналы или wg.Wait в цикле после запуска горутины?
Если каналы то писать сначала в канал значение переменной из цикла, а в горутине уже читать из этого канала и кидать в stdout
Если ты в канал пишешь из горутины - то порядок будет все равно случайный. Или я не понял ) Тогда покажи код плз )
@@itkrasavchik Каналы: #4heimODSA7A
Но выглядит ужас имхо
с wg: #u98CjhAlYJ0
но все равно что-то смущает
ps. линки на goplay с прямыми ссылки, видимо, комент удаляется
@@hound406 видимо, ща тоже попробую:
Каналы - goplay.space/#4heimODSA7A
WG: goplay.space/#u98CjhAlYJ0
можно еще подумать как сделать без блокировок горутин )
@@itkrasavchik sleep'ом ?)))
#F4Rb3f5G7ks вот еще вариант)
К сожалению или к счастью, в go 1.21 изменят семантику переменных цикла(
в 1.22, насколько я понял. В 1.21 оно все еще экспериментально и выключено по умолчанию.
Канал использовать чтобы отсортировать задачи печати.
wg.WaitGroup писать внутри цикла, но до запуска горутин?
Да, есть уже такой вариант - goplay.space/#u98CjhAlYJ0 - как насчет того, чтоб не блокировать горутины? )
@@itkrasavchik те гортины, которые пораждаются в цикле не блокируются.
Блокируется только main горутина, ты ее имеешь ввиду?
@@hound406 переформулирую ) не трогать планировщик и оставить Wait вне цикла )
В 3 задачке runtime.Gosched() добавить
Красавчик, но здесь успели чуть раньше ) th-cam.com/video/QdfiU1khTTs/w-d-xo.html&lc=UgzYd6xB0q2ykOjO6X94AaABAg.9ra4mY1Y_zz9ra7nSg6XZN
@@itkrasavchik А можете объяснить почему runtime.Gosched() приводит к такому поведению?
@@ivangurin7062 goplay.space/#F4Rb3f5G7ks - runtime.Gosched переключает на горутину с принтом сразу после ее создания, потому что другой, на которую можно переключиться нету.
@@itkrasavchik Спасибо. Понятно.
у меня все равно в некоторых случаях выводит не по порядку@@itkrasavchik