В этой подборке вопросы сгруппированы по формату «Лайвкодинг», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: frontend, browser, database.
Скопируйте request и попробуйте отправить его через select с default. Так вызывающий код не сможет изменить уже принятый payload, а переполненная очередь не заблокирует запрос.
Сначала посчитайте частоты значений, затем удалите каждый узел, чья частота больше одного. Удаляются все вхождения повторяющегося значения, а не только лишние копии.
Разбейте шаблон на сегменты и последовательно замените сегменты, начинающиеся с двоеточия, на аргументы. Для примера получится mailbox/inbox/folder/123.
Нужны WithCancel, проверка maxWorkers и ошибок создания запроса, отменяемое ожидание слота и возврат error. Сейчас cancel не определён, return отсутствует, а горутин создаётся по числу сообщений.
Присваивание структуры создаёт копию, поэтому исходно выводится 123. Измените a напрямую, присвойте изменённую копию обратно или используйте указатель на a.
Deadlock можно получить, если две горутины захватят два mutex в противоположном порядке. Барьер делает пример воспроизводимым, без надежды на случайный scheduling.
В коде есть опасный Unlock без показанного Lock, повторное закрытие канала и гонка с отправителями. Cancel не прерывает произвольную задачу немедленно.
make([]Product, 100) создаёт уже 100 элементов. Для пустой корзины с запасом памяти используйте make([]Product, 0, 100), а добавление делайте через append.