Go语言没有异常机制, 引入了一个关于错误处理的标准模式,即 error 接口
type error interface {Error() string}
1 返回error
func Foo(param int)(n int, err error) {// ...// 可以通过errors.New()来创建error实例return nil, errors.New("出错了")}func main() {n, err := Foo(0) // 调用时的代码建议按如下方式处理错误情况:if err != nil {fmt.Println(err)return}// ...}
2 自定义Error
package mainimport ("fmt""os""time")type PathError struct {path stringop stringcreateTime stringmessage string}// 定义Error方法, 就实现了error接口func (p *PathError) Error() string {return fmt.Sprintf("path=%s \nop=%s \ncreateTime=%s \nmessage=%s", p.path,p.op, p.createTime, p.message)}func Open(filename string) error {file, err := os.Open(filename)if err != nil {return &PathError{path: filename,op: "read",message: err.Error(),createTime: fmt.Sprintf("%v", time.Now()),}}defer file.Close()return nil}func main() {err := Open("/Users/5lmh/Desktop/go/src/test.txt")switch v := err.(type) {case *PathError:fmt.Println("get path error,", v)default:}}
