Зачем `context.Context` в Go? Как правильно использовать в HTTP-хендлерах, БД-вызовах, gRPC? Что делает `ctx.Done()`?