werr - 错误包装器在Go中为错误类型创建一个包装器

werr - 错误包装器在Go中为错误类型创建一个包装器,可以捕捉文件,行和堆栈被调用的地方。

Go 其它杂项

访问GitHub主页

共13Star

详细介绍

Error Wrapper

GoDoc Codeship Codecov Go Report Card

Error Wrapper creates an wrapper for the error type in Go which captures the File, Line and Stack of where it was called.

Installation

go get -u github.com/txgruppi/werr

Why?

I don't like to use panic.

I want my apps to run forever and just output errors to a log.

Usually I write my logs using logger.Printf("%#v", err) but I needed more info related to the error, so I created this package.

Example

package main

import (
	"fmt"
	"os"

	"github.com/txgruppi/werr"
)

func main() {
	file, err := os.Open("/tmp/my-missing-file")
	if err != nil {
		err = werr.Wrap(err)                        // Wrap it
		fmt.Println(err.Error())                    // Return the original error message
		if wrapped, ok := err.(*werr.Wrapper); ok { // Try to convert to `*werr.Wrapper`
			lg, _ := wrapped.Log() // Generate the log message
			fmt.Println(lg)        // Print the log message
		}
	}
	defer file.Close()
}

This code will output something line this:

open /tmp/my-missing-file: no such file or directory
/Users/txgruppi/code/temp/test.go:13 open /tmp/my-missing-file: no such file or directory
goroutine 1 [running]:
github.com/txgruppi/werr.Wrap(0x2208246900, 0x208270300, 0x0, 0x0)
        /Users/txgruppi/code/go/src/github.com/txgruppi/werr/funcs.go:24 +0x153
main.main()
        /Users/txgruppi/code/temp/test.go:13 +0x72

Tests

go get -u -t github.com/txgruppi/werr
cd $GOPATH/src/github.com/txgruppi/werr
go test ./...

License

MIT

推荐源码