23 lines
748 B
Markdown
23 lines
748 B
Markdown
## `errors.AsType`
|
||
|
||
> *用泛型把* `errors.As` *的“先声明变量再传指针”简化为“直接返回* `(E, bool)`*”,是* `errors.As` *的语法糖升级*
|
||
|
||
**使用场景:**
|
||
|
||
- 与 `errors.As` 完全相同(按类型提取错误),但写起来更简洁
|
||
- 由于类型参数 `E` 必须是 `error` 接口的实现类型,**能在编译期避免 `errors.As` 那种“传错指针类型导致运行时 panic”的问题**
|
||
|
||
```go
|
||
// 传统 errors.As:需要先声明变量
|
||
var mysqlErr *mysql.MySQLError
|
||
if errors.As(err, &mysqlErr) {
|
||
return true, mysqlErr.Number
|
||
}
|
||
|
||
// errors.AsType(Go 1.26+):无需预先声明变量
|
||
if mysqlErr, ok := errors.AsType[*mysql.MySQLError](err); ok {
|
||
return true, mysqlErr.Number
|
||
}
|
||
```
|
||
|