首页 > 其他 > 详细

Go错误

时间:2020-02-02 10:34:07      阅读:68      评论:0      收藏:0      [点我收藏+]

1. error

package main

import (
	"errors"
	"fmt"
)

func main() {
	/*
	error:内置的数据类型,内置的接口
		定义方法:Error() string

	使用go语言提供好的包:
		errors包下的函数:New(),创建一个error对象
		fmt包下的Errorf()函数:
			func Errorf(format string, a ...interface{}) error
	 */
	//1.创建一个error数据
	err1 := errors.New("自己创建玩的。。")
	fmt.Println(err1) //自己创建玩的。。
	fmt.Printf("%T\n", err1) //*errors.errorString

	//2.另一个创建error的方法
	err2 := fmt.Errorf("错误的信息码:%d", 100)
	fmt.Println(err2) //错误的信息码:100
	fmt.Printf("%T\n", err2) //*errors.errorString

	err3 := checkAge(-30) //您给定的年龄是:-30,不合法
	if err3 != nil {
		fmt.Println(err3)
		return 
	}
	fmt.Println("程序。。。go on。。。")
}

//设计一个函数:验证年龄是否合法,如果为负数,就返回一个error
func checkAge(age int) error {
	if age < 0 {
		//返回error对象
		//return errors.New("年龄不合法")
		err := fmt.Errorf("您给定的年龄是:%d,不合法", age)
		return err
	}
	fmt.Println("年龄是:", age)
	return nil
}

2. panic/recover

package main

import "fmt"

func main() {
	/*
	panic:词义"恐慌",
	recover:"恢复"
	go语言利用panic(),recover(),实现程序中的极特殊的异常的处理
		panic(),让当前的程序进入恐慌,中断程序的执行
		recover(),让程序恢复,必须在defer函数中执行
	 */
	//恢复函数
	//需要在panic之前执行到recover
	defer func() {
		if msg := recover(); msg != nil {
			fmt.Println(msg, "程序回复啦。。。")
		}
	}()
	funA()
	//先被defer的后执行,后被defer的先执行
	defer myprint("defer main:3.....")
	funB() //panic传递到这,下面的下面不执行
	defer myprint("defer main:4.....")

	fmt.Println("main..over。。。。")

}
func myprint(s string) {
	fmt.Println(s)
}

func funA() {
	fmt.Println("我是一个函数funA()....")
}

func funB() { //外围函数

	fmt.Println("我是函数funB()...")
	defer myprint("defer funB():1.....")

	for i := 1; i <= 10; i++ {
		fmt.Println("i:", i)
		if i == 5 {
			//让程序中断
			panic("funB函数,恐慌了") //下面的代码不执行
		}
	} //当外围函数的代码中发生了运行恐慌,只有其中所有的已经defer的函数全部都执行完毕后,该运行恐慌才会真正被扩展至调用处。
	defer myprint("defer funB():2.....")
}

 

Go错误

原文:https://www.cnblogs.com/yzg-14/p/12250976.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!