github.com/pkg/errors库学习

为了理解go error,进一步学习github.com/pkg/errors作的训练。

http://www.shtml.net/article/content/tok/48369/id/37733.html

https://studygolang.com/articles/17430?fr=sidebar

https://blog.csdn.net/weixin_42506905/article/details/94482183

https://blog.csdn.net/fwhezfwhez/article/details/79175376

https://www.jianshu.com/p/75d3682cd135

package main

import (
	"fmt"
	"os"
	"runtime"

	"github.com/pkg/errors"
)

func main() {
	content, err := openFile()
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(string(content))
	}

	// github.com/pkg/errors测试
	errPkg := test1()
	if errPkg != nil {
		fmt.Println("err:", errPkg)
	}

	fmt.Printf("err :%+v\n", errPkg)

	fmt.Println("Hello world")
}

type stack []uintptr

type errorString struct {
	s string
	*stack
}

func callers() *stack {
	const depth = 32
	var pcs [depth]uintptr
	n := runtime.Callers(3, pcs[:])
	var st stack = pcs[0:n]
	return &st
}

func newError(text string) error {
	return &errorString{
		s:     text,
		stack: callers(),
	}
}

//error只有一个方法 Error,只要实现了这个方法,就是实现了error
func (e *errorString) Error() string {
	return e.s
}

//只是模拟一个错误
func openFile() ([]byte, error) {
	return nil, newError("new custom error")
}

func test1() error {
	_, err := os.Open("helloworld.txt")
	if err != nil {
		//return errors.WithMessage(err, "test1")
		return errors.Wrap(err, "test1")
	}
	return nil
}

  

猜你喜欢

转载自www.cnblogs.com/aguncn/p/11789861.html