Skip to content
/ funk Public

go common component, include error, log, config, etc...

Notifications You must be signed in to change notification settings

pubgo/funk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0373883 · Dec 25, 2024
Dec 7, 2024
Nov 19, 2024
Dec 17, 2024
Jul 1, 2023
Apr 26, 2024
Nov 19, 2024
Feb 22, 2023
Dec 7, 2024
Dec 25, 2024
Apr 26, 2024
Apr 26, 2024
Sep 21, 2024
Apr 26, 2024
Dec 25, 2024
Dec 7, 2024
Jul 1, 2023
Aug 22, 2024
Jul 1, 2023
Jul 1, 2023
Dec 7, 2024
Dec 25, 2024
Apr 26, 2024
Sep 21, 2024
Apr 26, 2024
Apr 26, 2024
Dec 7, 2024
Jul 1, 2023
Apr 26, 2024
Dec 7, 2024
Aug 22, 2024
Nov 19, 2024
Jul 1, 2023
Aug 22, 2024
Apr 26, 2024
Dec 7, 2024
Apr 26, 2024
Aug 22, 2024
Aug 22, 2024
Jul 3, 2024
Aug 22, 2024
Aug 8, 2022
Dec 7, 2024
Apr 26, 2024
Jul 1, 2023
Apr 26, 2024
Sep 21, 2024
Jan 9, 2024
Jan 18, 2024
Sep 21, 2024
Jan 14, 2023
Dec 7, 2024
Jan 17, 2024
Dec 7, 2024
Nov 6, 2021
Aug 22, 2024
Dec 25, 2024
Dec 25, 2024
Sep 21, 2024

Repository files navigation

xerror

go error 简单实现

  1. 高效处理golang的error, 避免处理大量的 err!=nil 判断
  2. 高效处理golang的recover, 让错误中包含丰富的堆栈信息
  3. xerror实现标准As,Is,Unwrap接口, 可以和其他error库一起使用
  4. 简单易用

性能分析

go test -bench=. -benchmem -memprofile memprofile.out -cpuprofile profile.out ./...
go tool pprof -http=":8081" profile.out
go tool pprof -http=":8081" memprofile.out
goos: darwin
goarch: amd64
pkg: github.com/pubgo/xerror
BenchmarkPanic-8                	 1353934	       883 ns/op	     128 B/op	       2 allocs/op
BenchmarkPanicWithOutCaller-8   	 3861938	       309 ns/op	      48 B/op	       1 allocs/op
BenchmarkNoPanic-8              	201641330	         5.87 ns/op	       0 B/op	       0 allocs/op
PASS
ok      github.com/pubgo/xerror 4.363s

example

package xerror_test

import (
	"fmt"
	"testing"

	"github.com/pubgo/xerror"
)

func TestErr(t *testing.T) {
	fmt.Println(xerror.Wrap(xerror.ErrAssert))
}

func TestParseWith(t *testing.T) {
	var err = fmt.Errorf("hello error")
	xerror.ParseWith(err, func(err xerror.XErr) {
		fmt.Printf("%v\n", err)
	})
}

func TestRespTest(t *testing.T) {
	defer xerror.RespTest(t)
	TestPanic1(t)
}

func TestRespNext(t *testing.T) {
	defer xerror.RespExit("TestRespNext")
	TestPanic1(t)
}

func TestPanic1(t *testing.T) {
	//defer xerror.RespExit()
	defer xerror.RespRaise(func(err xerror.XErr) error {
		return xerror.WrapF(err, "test raise")
	})

	//xerror.Panic(xerror.New("ok"))
	xerror.Panic(fmt.Errorf("ss"))
}

func init1Next() (err error) {
	defer xerror.RespErr(&err)
	xerror.Panic(fmt.Errorf("test next"))
	return nil
}

func BenchmarkNoPanic(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = func() (err error) {
			defer xerror.RespErr(&err)
			xerror.Panic(nil)
			return
		}()
	}
}

About

go common component, include error, log, config, etc...

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages