sunnyJam 2019-10-28
1.错误处理
如果要写出健壮 ,易维护的代码 ,错误处理就是关键 ,考虑到可能会发生的意外对其进行处理
go的错误处理与众不同 ,在调用可能出现问题的方法和函数时都会返回一个类型为error的值 ,由调用者去决定如何处理错误
错误是一个值类型error ,零值为nil
2.接受错误类型
可能文件资源不存在
package main import ( "fmt" "io/ioutil" ) func main() { text,err := ioutil.ReadFile("fuben.go") if err == nil { fmt.Println(err) } fmt.Printf("%s",text) }
3.创建错误
errors.New("提示")
package main import ( "errors" "fmt" ) func main() { err := errors.New("出现错误") if err != nil { fmt.Println(err) } }
fmt.Errof() #格式化创建错误
package main import ( "fmt" ) func main() { name,role := "屈冠文","admin" err:=fmt.Errorf("%v is not permission %v",name,role) if err != nil{ fmt.Println(err) } }
4.从函数和方法返回错误
在签名处定义好error返回类型
package main import ( "fmt" "strconv" ) func EvenNumber(num int) (string, error) { //多返回值括号括起来 if num%2 != 0 { err := fmt.Errorf("%v不是偶数", num) return "", err } return strconv.Itoa(num) + "是偶数", nil } func main() { a := 12 b := 13 c := 18 ret, err := EvenNumber(a) fmt.Println(ret, err) ret, err = EvenNumber(b) fmt.Println(ret, err) //这里直接打印了异常 ret, err = EvenNumber(c) fmt.Println(ret, err) }
5.painc
错误中断程序运行 ,谨慎使用 ,当出现painc立即中断程序 (当错误无法解决或继续执行造成更多错误时使用)
package main import "fmt" func main() { fmt.Println("1") panic("出现问题,中止") fmt.Println("2") }