A request enters through a handler. The useful question is what remains visible after the handler returns.
Errors travel with values. Context carries a deadline and a reason to stop. Both make the return path part of the program instead of an afterthought.
value, err := service.Find(ctx, id)
if err != nil {
return err
}
The request ends. Its effects may not.