在开发过程中, 标准库返回的error内容已经无法满足我们的需要时,发现builtin.go中error是一个interface,
type error interface {
Error() string
}
所以只需要创建一个包含Error() string函数的结构体即可。
1.在go path下新建errors包
vim $GOPATH/github.com/mypractise/error/errors.go
1 package errors 2 3 type Error struct { 4 ErrCode int 5 ErrMsg string 6 } 7 8 func NewError(code int, msg string) *Error { 9 return &Error{ErrCode: code, ErrMsg: msg} 10 } 11 12 func (err *Error) Error() string { 13 return err.ErrMsg 14 }
2.开始调用errors包
vim ./test.go
1 package main 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 8 myerr "github.com/mypractise/errors" 9 ) 10 11 func myErr() error { 12 13 err := myerr.NewError(2, "err test") 14 return err 15 } 16 17 func staErr() error { 18 m := make(map[string]string) 19 err := json.Unmarshal([]byte(""), m) 20 if err != nil { 21 return err 22 } 23 24 return errors.New("aaaaa") 25 } 26 27 func main() { 28 err1 := staErr() 29 fmt.Println("------sta err:", err1.Error()) 30 31 err2 := myErr() 32 fmt.Println("------my err:", err2.Error(), err2.(*myerr.Error).ErrCode) 33 }
go run ./test.go