1.错误处理
如果要写出健壮 ,易维护的代码 ,错误处理就是关键 ,考虑到可能会发生的意外对其进行处理
go的错误处理与众不同 ,在调用可能出现问题的方法和函数时都会返回一个类型为error的值 ,由调用者去决定如何处理错误
错误是一个值类型error ,零值为nil
2.接受错误类型
可能文件资源不存在

1 package main
2
3 import (
4 "fmt"
5 "io/ioutil"
6 )
7
8 func main() {
9 text,err := ioutil.ReadFile("fuben.go")
10 if err == nil {
11 fmt.Println(err)
12 }
13 fmt.Printf("%s",text)
14 }
3.创建错误
errors.New("提示")

1 package main
2
3 import (
4 "errors"
5 "fmt"
6 )
7
8 func main() {
9 err := errors.New("出现错误")
10 if err != nil {
11 fmt.Println(err)
12 }
13 }
fmt.Errof() #格式化创建错误

1 package main
2
3 import (
4 "fmt"
5 )
6
7 func main() {
8 name,role := "屈冠文","admin"
9 err:=fmt.Errorf("%v is not permission %v",name,role)
10 if err != nil{
11 fmt.Println(err)
12 }
13 }
4.从函数和方法返回错误
在签名处定义好error返回类型

1 package main
2
3 import (
4 "fmt"
5 "strconv"
6 )
7
8 func EvenNumber(num int) (string, error) { //多返回值括号括起来
9 if num%2 != 0 {
10 err := fmt.Errorf("%v不是偶数", num)
11 return "", err
12 }
13 return strconv.Itoa(num) + "是偶数", nil
14 }
15
16 func main() {
17 a := 12
18 b := 13
19 c := 18
20 ret, err := EvenNumber(a)
21 fmt.Println(ret, err)
22 ret, err = EvenNumber(b)
23 fmt.Println(ret, err) //这里直接打印了异常
24 ret, err = EvenNumber(c)
25 fmt.Println(ret, err)
26 }
5.painc
错误中断程序运行 ,谨慎使用 ,当出现painc立即中断程序 (当错误无法解决或继续执行造成更多错误时使用)

1 package main
2
3 import "fmt"
4
5 func main() {
6 fmt.Println("1")
7 panic("出现问题,中止")
8 fmt.Println("2")
9 }
