Day10

今天简单看了一下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")
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值