golang 異常處理

/**
  golang defer
*/
package main

import (
	"fmt"
)

var p = fmt.Println
var pf = fmt.Printf

func div(a, b int) int {
	defer func() {
		//func recover() interface{}   recover爲內建函數
		err := recover()
		if err != nil {
			p(err)
		}
	}()
	return a / b
}

/* 內建的接口 error
type error interface {
    Error() string
}
*/

type MyError struct {
	ErrorInfo string
}

func (this *MyError) Error() string {
	return this.ErrorInfo
}

func main() {
	div(2, 0)
	p("------main--------")
	defer func() {
		p("----main finally1------")
		err := recover()
		if err != nil {
			p(err)
		}
	}()
	defer func() {
		p("----main finally2------")
		err := recover()
		if err != nil {
			p(err)
			panic(MyError{ErrorInfo: "又一個測試"})
		}
	}()
	//func panic(v interface{})  一個error
	panic(MyError{ErrorInfo: "這個一個測試"})

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章