GO error异常接口
error接口
package main
import (
"fmt"
"errors"
)
func dive(a int, b int) (value int, err error) {
if b == 0 {
err = errors.New("除数不能为0")
return
}
value = a / b
return
}
func main() {
a := 10
b := 5
value, err := dive(a, b)
if err != nil {
fmt.Println("runtime error:",err)
} else {
fmt.Println(value)
}
}
panic异常
package main
import "fmt"
func test(i int){
var arr [10]int
//panic("runtime error: index out of range")
arr[i]=123
fmt.Println(arr)
}
func main() {
test(10)
//fmt.Println("hello world1")
//fmt.Println("hello world2")
////当程序遇见panic是自动终止
//panic("hello world3")
//fmt.Println("hello world3")
//fmt.Println("hello world4")
//fmt.Println("hello world5")
}
延迟调用defer (根据入栈出栈规则执行)
package main
import "fmt"
func main0301() {
fmt.Println("GO学习")
defer fmt.Println("IT行业")
defer fmt.Println("日薪越亿")
fmt.Println("轻松就业")
}
func main0302() {
a := 10
b := 20
//func (a int,b int){
// fmt.Println(a+b)
//}(a,b)
f := func(a int, b int) {
fmt.Println(a + b)
}
//如果在defer 调用时将函数参数先放在内存中 是一个独立的空间 不会因为改变值允许数据
defer f(a, b)
a = 123
b = 321
}
func main() {
a := 10
b := 20
f := func() {
fmt.Println(a + b)
}
//如果不传递参数 使用外部的变量 如果外部变量修改 会影响函数的值
defer f()
a = 123
b = 321
}
recover拦截
package main
import "fmt"
func demo(i int) {
//错误拦截到出现在错误之前
defer func() {
//错误拦截 panic异常错误
err := recover()
//判断是否出现错误
if err != nil {
fmt.Println(err)
}
}()
var arr [10]int
var p *int //0x0 nil
//p = new(int)
*p = 123
//数组下标越界
arr[i] = 123
fmt.Println(arr)
}
func main() {
demo(10)
fmt.Println("hello world")
}