type error interface {
Error() string
}
package main
import (
"fmt"
"github.com/pkg/errors"
)
func main() {
err := errors.New("建立錯誤訊息")
print(err)
printErr(err)
fmt.Printf("--------\n")
err1 := errors.Errorf("格式化錯誤訊息 %d", 10)
print(err1)
printErr(err1)
fmt.Printf("--------\n")
err2 := fmt.Errorf("格式化錯誤訊息 %d", 100)
print(err2)
printErr(err2)
}
func print(err error) {
fmt.Printf("%s\n", err.Error())
}
func printErr(err error) {
fmt.Printf("%+v\n", err)
}
type DefinedError interface {
Error() string
Code() int
}
type definedError struct {
code int
message string
}
func newDefinedError(code int, message string) error {
return &definedError{code: code, message: message}
}
func (e *definedError) Code() int {
return e.code
}
func (e *definedError) Error() string {
return e.message
}
------------------------------
使用
func xxx() error{
err := newDefinedError(http.StatusNotFound, "description")
return err
}
判斷
if IErr, ok := err.(DefinedError); ok { //這邊用到轉型的概念,可以做為判斷
router.ErrResponse(c, IErr.Code(), IErr)
return
}