今天简单看了一下go的异常处理,感觉还没学透,以后有时间再补一下
package main
import(
"errors"
"fmt"
_ "fmt"
)
func main(){
fmt.Println("Happy Day 10!")
// 异常处理(Go语言内置了一个简单的错误接口作为一种错误处理机制)
// 一、error:Go的error构造有两种方式,分别是
//第一种:errors.New()
err1 := errors.New("This is an error\n")
if err1 != nil{
fmt.Print(err1)
}
//第二种:fmt.Errorf()
err2 := fmt.Errorf("This is an error2\n")
if err2 != nil{
fmt.Print(err2)
}
//自定义错误的例子
fmt.Println(Nature(1))
fmt.Println(Nature(-1))
/*
Go语言的error代表的并不是真“异常”,只是通过返回error来表示错误信息,
换句话说,不是运行时错误范围预定义的错误,某种不符合期望的行为并不会
导致程序无法运行(自然数函数例子),都应使用error进行异常处理。当程序
出现重大错误,如数组越界,才会将其当成真正的异常,并用panic来处理。
*/
//二、panic(Go不使用try...catch方法来处理异常,而是使用panic和recover)
/*
fmt.Println("Hello, Go!@")
panic(errors.New("I am an error"))
fmt.Println("hello, again!")
*/
defer func(){
fmt.Println("我是defer里第一个打印函数")
if err := recover(); err != nil{
fmt.Println(err)
}
fmt.Println("我是defer里第二个打印函数")
}()
f()
}
type NotNature float64
func(err NotNature)Error() string{
return fmt.Sprintf("自然数为≥0的数:%v", float64(err))
}
func Nature(x float64)(float64, error){
if x<0{
return 0,NotNature(x)
}else{
return x,nil
}
}
func f(){
fmt.Println("1")
panic("我是panic")
fmt.Println("2")
}