Igor Panasyuk | IGORoutine Programming
2.11K subscribers
112 photos
8 videos
75 links
Тимлид Яндекса, разрабатываю эквайринг, обеспечивающий обработку всех платежей компании. Доцент практики в ИТМО, веду несколько курсов, также преподаю в ШАД. Выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества
Download Telegram
Только успел отправить призы с новогоднего розыгрыша - уже наступил новый праздник)

Поздравляю мужскую часть канала с 23 февраля!

Не буду сегодня говорить про Родину - знаю, что у всех на этот счёт разные мнения. Да и из моих уст, как человека с несколькими гражданствами, это звучало бы странно.

В этот день желаю вам здоровья, силы и чести.
Становиться лучше с каждым днём - чтобы иметь возможность защитить себя, свою семью и свои ценности.

Буду продолжать радовать вас новыми видео и проектами. Совсем недавно выпустил разбор Go 1.26. Честно говоря, про сам язык Go я уже будто разобрал всё, что можно. Очень много видео-лекций сейчас лежат и ждут монтажа.

Поставьте, пожалуйста, 🙂 , если вам было бы интересно увидеть их в сыром формате.

На текущий момент хочу начать разбирать всё, что связано с архитектурой проекта на Go и не только. До конца февраля выйдет полноценный разбор gRPC, начиная от внутреннего устройства HTTP/2, заканчивая проектированием API и генерацией кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10124🫡14❤‍🔥114🖕3
🙂 Этот день настал

Последние пару месяцев меня очень часто спрашивали про то, когда будет запуск курса по Go.

Хоть я и так выкладываю и буду выкладывать огромное количество уникальных материалов в открытый доступ, многие хотят разобраться и погрузиться ещё глубже.

Что скрывать, язык Go действительно набрал огромную популярность. В этом году это топ-1 курс по выбору в ИТМО.

То есть, мало того, что AI и кризис создают инфляцию знаний, так ещё и подрастает конкурирующее поколение, которое сейчас учится в ведущих вузах страны, в том числе на моих курсах.

Уже периодически слышу истории про то, как люди не могут найти работу после сокращений с несколькими годами опыта разработки, и дальше будет только хуже.

Единственный способ победить это повысить свою компетентность.

Как раз для этого запускаю уникальный и ограниченный поток «The Nature of Go», в котором собрал симбиоз своих нескольких курсов.

База computer science, внутреннее устройство Go, разработка микросервисов, применение AI, написание резюме, софтскиллы и прохождение собеседований.

Полный набор для того, чтобы адаптироваться к новой реальности и не проиграть.

👉👉 Link
👉👉 Link
👉👉 Link
Please open Telegram to view this post
VIEW IN TELEGRAM
727🤩1410🔥52
🙂 gRPC на Go: от внутреннего устройства до архитектуры

Как и говорил, хочу начать разбирать всё, что связано с архитектурой проекта на Go и не только.

В новом видео подробно разобрал тему gRPC, начиная от истории создания и внутреннего устройства HTTP/2, заканчивая генерацией кода на Go через buf (easyp). Приятного просмотра!

▶️ YouTube
📱 VK Видео
🤪 Дзен
🟣 Rutube

🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
8❤‍🔥33🤩6433
Forwarded from Yandex for Backend
🔍 Что нового в последней версии Go

Многие продукты Яндекса используют этот язык в своих сервисах: от инфраструктуры автономного транспорта до продуктовых сервисов финтеха. Поэтому разработчики постоянно расширяют экспертизу в Go: изучают лучшие практики, делятся опытом, проводят митапы и подробно разбирают нововведения.

Сейчас есть отличный повод этим заняться: 10 февраля вышел Go 1.26.

👩‍⚕️ Мы попросили Игоря Панасюка из группы продуктовой разработки платежей разобрать ключевые изменения релиза. Давайте посмотрим, что интересного принесла новая версия и на что стоит обратить внимание.

🔶 Для тех, кто хочет погрузиться глубже, в личном канале Игоря есть пост и видео с материалами по теме.

📺 И ещё несколько полезных видео:

🟢 Сборщик мусора в Go 1.26
🟢 Ассемблер и SIMD в новых map и GC

🐚 А что вам показалось наиболее интересным в обновлении? Пишите в комментариях.

Подписывайтесь:
💬 @Yandex4Backend
📹 @YandexforBackend
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
724124🔥2
Forwarded from igoroutine.courses
😢😢 От этого data race не спасает даже race detector

Data race это частный случай race condition. Определять термин data race на самом деле можно по-разному.

Самое простое определение:
Состояние во время исполнения, когда две операции над переменной происходят из разных горутин без синхронизации, при этом хотя бы одна из них является записью.

Чуть более сложное:
Состояние во время исполнения, когда две конфликтующие операции над переменной происходят из разных горутин без синхронизации.

И самое сложное на основании формализма из Go memory model:
Состояние во время исполнения, когда две конфликтующие операции над переменной нельзя разделить отношением happens before


Казалось бы, да ну их, есть прекрасный инструмент race detector, который инструментриует программу при компиляции и позволяет во время исполнения находить data race.

Но, внезапно, выясняется, что он не всегда может найти проблему. Это напрямую следует из его устройства.

Пример:

Мейнтейнеры Go пытались реализовать такой интерфейс:


type Cron interface {
Run(ctx context.Context, action func(), next func() time.Duration)
}


Реализация должна вызывать action, ожидая перед каждым запуском next() времени. После отмены контекста не должно быть вызовов action.

Такой подход на практике очень часто используется, например:

• HTTP ретраи
• Service discovery
• Adaptive polling
• Keepalive / heartbeat
• Любые задачи с backoff

Сходу у них получилась следующая реализация:


func (c *cronImpl) Run(ctx context.Context, action func(), next func() time.Duration) {
var t *time.Timer

t = time.AfterFunc(next(), func() {
select {
case <-ctx.Done():
return
default:
action()
t.Reset(next())
}
})

<-ctx.Done()
}


Запускаем тесты:



func TestCron(t *testing.T) {
synctest.Test(t, func(t *testing.T) {
c := New()

var n atomic.Int64
next := func() time.Duration {
if n.Add(1) <= 5 {
return 0
}

return 1 * time.Second
}

var calls atomic.Int64
ctx, cancel := context.WithCancel(t.Context())

t.Cleanup(func() {
cancel()
})

done := make(chan struct{})
go func() {
defer close(done)

c.Run(ctx, func() {
calls.Add(1)
}, next)
}()

synctest.Wait()

require.Greater(t, calls.Load(), int64(0))

cancel()
synctest.Wait()

select {
case <-done:
default:
t.Fatalf("Run did not exit after cancel")
}
})
}


Которые успешно проходят даже с race detector'ом.

Но в этой реализации действительно есть data race, и race detector его не находит.

👉👉 Пишите ваши предположения в комментариях, пост с правильным ответом выйдет в ближайшее время.

Ссылка с примером использования: https://go.dev/play/p/Fq-yNa0wXWj

P.S. Пожалуйста, те, кто проходил курс и решал это задание на практике, не пишите сразу правильный ответ)
Please open Telegram to view this post
VIEW IN TELEGRAM
9🤔8👍211