z1err

package module
v1.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 26, 2024 License: Apache-2.0 Imports: 3 Imported by: 14

README

err

介绍

简化 golang 的错误处理流程,减少 iferr。

软件架构

软件架构说明

	错误处理思路总结
		本函数外处理
			直接返回错误
				defer z1err.Handle(&err) 本函数需要使用具名的error返回值,如 func1()(err error){...}

		本函数内处理
			单独处理
				在发送错误的地方处理,官方推荐
					if err != nil {...}

			集中处理,减少if err != nil {...}重复出现的次数
				在统一处理错误的地方处理
					defer z1err.Handle(nil, func(err error) {log.Println(err)}

	check/handle 方案的分析
		优点
			视觉呈现较好
			实现复杂度较低
			具有通用性

		缺点
			直接返回错误时,本函数需要使用具名的error返回值
			defer在go1.14之前有额外性能开销,之后可以忽略不计
			panic/recover让函数调用的性能降低大约90%。 28.8ns/op > 271ns/op,函数调用花的时间非常少是纳秒所以问题不大。

安装教程
  1. go get gitee.com/z1gotool/z1err
  2. go get gitee.com/z1gotool/z1err@1.0.0
  3. xxxx
使用说明
  1. read test/case_test.go
  2. read rs/main.go
  3. xxxx
  4. 实例

package main

import (
	"errors"
	"log"

	"gitee.com/z1gotool/z1err"
)

func main() {
	defer z1err.Handle(nil, func(err error) {
		log.Println(err)
		log.Println(`-----------`)
		log.Println(z1err.StackPrint(err, 0))
		log.Println(`-----------`)
		log.Println(z1err.Is(err, `this is s test err`, `main.func1`))
		log.Println(`-----------`)
		log.Println(z1err.Is(err, `this is s test err`, `/lib1.func1`))
	})

	log.Println(`-----------`)
	func3()
}

func func3() {
	func2()
}

func func2() {
	func1()
}

func func1() {
	// panic(errors.New(`this is s test err`))
	err := errors.New(`this is s test err`)
	z1err.Check(err)
}


参与贡献
  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request
特技
  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Check

func Check(e error, opt ...interface{}) (noerr bool, wrapedErr error)

Check check and add addon msg to error or panic. eg1:Check(err) eg2:Check(err, true) eg3:Check(err, false) eg4:Check(err, true, "this is addon msg") eg5:Check(err, false, "this is addon msg")

func Handle

func Handle(returnErr *error, recoverFunc ...func(err error))

Handle catching error to return or assign to recoverFunc. eg1:defer z1err.Handle(&err) , 直接返回错误,必须使用具名的error返回值,如func1()(err error){...} eg2:defer z1err.Handle(nil, func(err error) {log.Println(`err callback`,err)}) , 函数内集中处理错误

eg2.1
defer z1err.Handle(nil, func(err error) {
	log.Println(err)
	log.Println(`-----------`)
	log.Println(z1err.StackPrint(err, 0))
	log.Println(`-----------`)
	log.Println(z1err.Is(err, `this is s test err`, `main.func1`))
	log.Println(`-----------`)
	log.Println(z1err.Is(err, `this is s test err`, `/lib1.func1`))
})

eg3:defer z1err.Handle(nil, func(err error) {log.Println(`err callback`,err)}, func(err error) {log.Println(`nil err callback`)})

func Is added in v1.1.0

func Is(err error, msgFlag string, funcFlag ...string) (ok bool)

Is Check error value. eg:z1err.Is(err, `this is s test err`) eg:z1err.Is(err, `this is s test err`, `main.func1`) eg:z1err.Is(err, `this is s test err`, `/rs.func1`)

func StackPrint

func StackPrint(err error, skip ...int) (str string)

StackPrint print msg with stack and can set skip. eg:z1err.StackPrint(err) eg:z1err.StackPrint(err, 7)

Types

This section is empty.

Directories

Path Synopsis
https://github.com/pkg/errors https://github.com/z1-mirror/errors
https://github.com/pkg/errors https://github.com/z1-mirror/errors

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL