error接口的使用:

package main

import (
	"errors"
	"fmt"
)

func main() {
	var err1 error = fmt.Errorf("%s", "This is error1")

	err2 := fmt.Errorf("%s", "this is error2")
	fmt.Println("error = ", err1)
	fmt.Println("error = ", err2)

	// 一般情况下的使用方法
	err3 := errors.New("This is error3")
}

error接口的应用:

package main

import (
	"errors"
	"fmt"
)

func Demo(a, b int) (result int, err error) {
	if b == 0 {
		err = errors.New("The b can not be zero")
	} else {
		result = a / b
	}
	return
}

func main() {
	result, err := Demo(12, 0)
	if err != nil {
		fmt.Println("error:", err)
	} else {
		fmt.Println("result = ", result)
	}
}

panic的使用:输出致命错误,程序中断

package main

import "fmt"

func Demo() {
	fmt.Println("demo")
}

func Demo1() {
	panic("程序中断")
	fmt.Println("demo1")
}

func Demo2() {
	fmt.Println("demo2")
}

func main() {
	Demo()
	Demo1()
	Demo2()
}

内部自动调用panic:

package main

import "fmt"

func Demo() {
	fmt.Println("demo")
}

func Demo1(n int) {
	var a [10]int
	a[n] = 666 // 当n越界之后内部会自动调用panic函数
}

func Demo2() {
	fmt.Println("demo2")
}

func main() {
	Demo()
	Demo1(12)
	Demo2()
}

recover:当程序有错误会中断,recover可以恢复中断的程序

package main

import "fmt"

func Demo() {
	fmt.Println("demo")
}

func Demo1(n int) {
	defer func() {
		// recover 恢复中断的程序,有错误时就会输出错误信息
		if err := recover(); err != nil {
			fmt.Println(err)
		}
	}()
	var a [10]int
	a[n] = 666 // 当n越界之后内部会自动调用panic函数
}

func Demo2() {
	fmt.Println("demo2")
}

func main() {
	Demo()
	Demo1(1)
	Demo2()
}