- error
err!=nil的意思是判断错误等不等于空,如果不等于空,就是有错误的产生,这个概念经常会用到
package main
import (
"fmt"
"io/ioutil"
)
func test001(a,b int) (result int,err error) {
err = nil //nil空
if b == 0 {
fmt.Println("err", err)
} else {
result = a / b
}
return
}
func main() {
result,err:=test001(10,2)
//err!=nil的意思是判断错误等不等于空,如果不等于空,就是有错误的产生
if err != nil {
fmt.Println("errors=",err)
}else {
fmt.Println(result)
}
const filename = "abc.txt"
if contents ,err :=ioutil.ReadFile(filename);err!= nil {
fmt.Println(err)
} else {
fmt.Printf("%s\n",contents)
}
}
- panic
导致函数的崩溃
很少调用
程序遇到panic函数自动自动
报告致命错误
- defer
defer是延迟调用,如下面代码,就算在第二个调用就已经出错,但程序依然会执行完全部的内容,最后在报错
package main
import "fmt"
func test002(x int) {
v:=100/x
fmt.Println(v)
}
func main() {
//defer只能出现在函数内部
//一个函数有多个defer语句 他们会以后进先出的顺序执行
defer fmt.Println("hello")
defer fmt.Println("alex")
//即使函数或者某个延迟调用发生错误,调用依旧会被执行
defer test002(0)
defer fmt.Println("ander")
}
package main
import "fmt"
func testA() {
fmt.Println("testA")
}
func testB(a int) {
//设置recover
//在defer调用的函数中使用recover
defer func() {
//防止程序崩溃recover
//fmt.Println(recover())//打印错误的原因
//err!=nil的意思是判断错误等不等于空,如果不等于空,就是有错误的产生
if err:=recover();err!=nil {
fmt.Println(err)
}else {
}
}() //最后的()的作用是调用匿名函数
var x [3]int
x[a]=999
fmt.Println(x[a])
}
func testC() {
fmt.Println("ccccccc")
}
func main() {
testA()
testB(3) //不加recover会发生异常
testC()
}