- 链式错误处理语法
- 通过
go generate自动转换代码 - 通过
errorn命令直接转换代码 - 支持多种返回场景(普通返回、panic等)
- 错误包装和上下文添加
go install github.com/1225754321/errorn- 导入包并添加生成指令:
//go:generate errorn
package main
import (
"errors"
"fmt"
"log"
"github.com/1225754321/errorn/errorn"
)- 使用链式错误处理语法:
func example() error {
err := someFunc()
errorn.Wrap(err, func(e error) error {
return fmt.Errorf("wrapped: %w", e)
})
errorn.Panic(err) // 如果err不为nil则panic
}- 添加默认错误处理函数(可选):
ee.AddDefaultOfFunc(func(err error) error {
return fmt.Errorf("default handler: %w", err)
})- 运行生成命令:
go generate ./...
# 或者
errorn -d .//go:generate errorn
package main
import (
ee "errorn/errorn"
"errors"
"fmt"
"log"
)
func main() {
ee.AddDefaultOfFunc(func(err error) error {
return fmt.Errorf("default handler: %w", err)
})
if err := run(); err != nil {
log.Fatal(err)
}
}
func run() error {
err := step1()
ee.Wrap(err, func(e error) error {
return fmt.Errorf("step1 failed: %w", e)
})
ee.Panic(err)
err = step2()
ee.Wrap(err)
return nil
}
func step1() error {
return errors.New("original error")
}
func step2() error {
return errors.New("another error")
}欢迎提交PR,请确保:
- 代码通过测试
- 遵循现有代码风格
- 更新相关文档