github.com/aquayi/gokit@v0.0.0-20170805152833-88827a405d9b/err.go (about)

     1  // err.go
     2  // Reference: https://github.com/reusee/codes/tree/master/err
     3  //
     4  //请牢记一点
     5  //error是**接口**
     6  //*Err实现Error()后,是满足error接口的类型
     7  //
     8  
     9  package GoKit
    10  
    11  import "fmt"
    12  
    13  // Error 是自定义的错误类型
    14  type Error struct {
    15  	Info string
    16  	Prev error
    17  }
    18  
    19  // Err 对Error添加新的信息,以便于追踪错误。
    20  func Err(err error, msgAndArgs ...interface{}) *Error {
    21  	return &Error{
    22  		Info: Message(msgAndArgs...),
    23  		Prev: err,
    24  	}
    25  }
    26  
    27  // Error() 帮助 Error struct 实现 error 接口
    28  func (e *Error) Error() string {
    29  	if e.Prev == nil {
    30  		// 只有当第一个 error 是 *Error时,才用的到这个
    31  		return fmt.Sprintf("%s", e.Info)
    32  	}
    33  	return fmt.Sprintf("%s ==> %s", e.Info, e.Prev)
    34  }