Skip to content

Timeout

go-zero enforces request timeouts at multiple layers to prevent slow upstreams from exhausting goroutine pools.

etc/app.yaml
Timeout: 3000 # milliseconds (default: 3000)

Requests exceeding this duration receive HTTP 408 automatically.

etc/rpc.yaml
Timeout: 2000 # milliseconds

Pass a context with deadline:

ctx, cancel := context.WithTimeout(l.ctx, 2*time.Second)
defer cancel()
resp, err := l.svcCtx.OrderRpc.CreateOrder(ctx, req)

go-zero’s TimeoutInterceptor propagates the deadline from the incoming request to all downstream RPC calls automatically.

server.AddRoute(rest.Route{
Method: http.MethodPost,
Path: "/slow-endpoint",
Handler: myHandler,
}, rest.WithTimeout(10*time.Second))
ScenarioBehaviour
Client disconnectsContext cancelled, upstream goroutine exits
Timeout exceeded408 returned; goroutine keeps running until completion
BothContext cancelled first