package main
import (
"fmt"
"time"
//log "github.com/thinkboy/log4go"
)
func PaincRecov(){
defer func(){
fmt.Println("defer start")
if err := recover(); err != nil {
fmt.Println(err)
}
fmt.Println("defer end")
}()
a := []string{"a", "b"}
fmt.Println(a[3])
panic("bug")
fmt.Println("func end")
}
func main(){
PaincRecov()
for {
fmt.Println("sleeping...")
time.Sleep(time.Second *4)
}
}
捕获异常并返回error
package main
import (
"fmt"
"time"
"errors"
//log "github.com/thinkboy/log4go"
)
func PaincRecov() (err error){
defer func(){
fmt.Println("defer start")
recErr := recover()
if nil != recErr {
fmt.Println(recErr)
}
strErr := recErr.(string)
fmt.Println("defer end")
err = errors.New(strErr)
}()
// a := []string{"a", "b"}
// fmt.Println(a[3])
panic("bug")
fmt.Println("func end")
return nil
}
func main(){
err := PaincRecov()
if (nil != err){
fmt.Printf("%v", err)
}
for {
fmt.Println("sleeping...")
time.Sleep(time.Second *4)
}
}
处理空指针异常,否则程序会崩溃
type TestSendChat struct {
UserId string
UserNo string
ChatInfo string
}
func BadAccess(){
defer func(){
recover();
// err := recover()
}()
var testSendChat *TestSendChat = nil
testSendChat.UserId = "1234"
}