[teamai] Push 87 resource(s) from XingfenD
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# samber/oops — Advanced Patterns
|
||||
|
||||
## Assertions
|
||||
|
||||
Use assertions for invariant checks (carefully — assertions panic):
|
||||
|
||||
```go
|
||||
func ProcessPayment(amount int) error {
|
||||
return oops.
|
||||
In("payment-service").
|
||||
Recover(func() {
|
||||
oops.Assertf(amount > 0, "amount must be positive, got %d", amount)
|
||||
oops.Assert(amount < 1_000_000)
|
||||
// ... payment logic
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
Assertions should be rare in Go. Use them only for truly impossible states that indicate a bug.
|
||||
|
||||
## Configuration
|
||||
|
||||
```go
|
||||
oops.StackTraceMaxDepth = 20 // adjust stack trace depth
|
||||
oops.SourceFragmentsHidden = false // enable source code fragments
|
||||
loc, _ := time.LoadLocation("America/New_York")
|
||||
oops.Local = loc // set timezone for error timestamps
|
||||
```
|
||||
|
||||
## Logger integration
|
||||
|
||||
`samber/oops` works with any logger. The error struct provides methods for extracting structured data:
|
||||
|
||||
```go
|
||||
oopsErr := err.(oops.OopsError)
|
||||
fmt.Println("operation failed",
|
||||
"code", oopsErr.Code(),
|
||||
"domain", oopsErr.Domain(),
|
||||
"user_id", oopsErr.User(),
|
||||
"error", oopsErr,
|
||||
)
|
||||
|
||||
// With slog
|
||||
slog.Error(err.Error(), slog.Any("error", err))
|
||||
|
||||
// With zerolog (formatter available)
|
||||
log.Error().Err(err).Msg("operation failed")
|
||||
|
||||
// With logrus (formatter available)
|
||||
log.WithError(err).Error("operation failed")
|
||||
```
|
||||
Reference in New Issue
Block a user