Graceful degradation in Go services is achieved by wrapping external calls in recover blocks and returning fallback data or errors instead of crashing. Use defer with recover to catch panics from dependencies and return a safe default response.
func callExternalService() (string, error) {
var result string
var err error
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("service degraded: %v", r)
result = "fallback-data"
}
}()
result, err = riskyExternalCall()
return result, err
}