go语言
异常处理:
自定义set
异常处理:
package main import "fmt" //异常处理(直接拷defer func()...) func f1() { fmt.Println("f1....") } func f2() { defer func() { //recover() //此时表示出现错误,也会继续向下执行 if a:=recover();a!=nil{ //出了错误要做什么事 //a 如果不等于nil 表示这个程序出了异常,a就是异常信息 // a 等于nil 就表示没有异常 fmt.Println("出错了") fmt.Println(a) //这就是异常信息 } //永远会被执行的(相当于finally)最后做的事 }() fmt.Println("f2...")
panic("你给我出去") //主动抛异常 var a = make([]int,3,3) fmt.Println(a[4]) } func f3() { fmt.Println("f3..") } //处理异常 // defer 表示延迟调用 // panic 就是python中的raise(主动抛异常) // recover 恢复程序 继续执行 func main() { //derfer 是先注册,后调用,后注册的先执行 // 即便程序=出现严重错误,也会执行,所以在defer中可以处理异常 defer fmt.Println("xxxx") //延迟调用,就是所有的都执行完,再执行xxxx defer fmt.Println("yyy") //f1,f2,f3,执行完,再执行yyy,然后再执行xxxx f1() f2() f3() }
错误信息
package main import ( "errors" "fmt" ) //错误 func f4(redius int) (int,error) { //第二个括号中的int是真正想要的,error是一个错误 if redius<0{ return 0,errors.New("错误信息") } return 100,nil //以后如果返回值有一个,就再加一个error类型 } func main() { //a,err:=f4(-10) a,err:=f4(-10) if err!=nil{ //说明出现错误 fmt.Println(err) //错误信息 } fmt.Println(a) fmt.Println(err) // 例如,正规写法 // _,err:=fmt.Println() //if err!=nil{ // fmt.Println("打印出错") //} }
自定义set
package main import "fmt" // 自定义集合 //可以放值 //可以判断值是否存在 可以查看长度 可以打印所有内容 //首先自定义类型 type MySet map[interface{}]bool //map中的参数为空接口,可以接受int,string类型,返回值为bool类型 // 绑定方法 func (s MySet) isExist(a interface{}) bool { // 判断a是不是空接口类型 //判断在不在,是不是,直接取即可,返回值为bool类型的true或者false return s[a] } //向类型中放值,用指针接受器,才会影响原来的 func (s *MySet) set(a interface{}){ (*s)[a]=true //解引用再放值 } //获取长度 func (s MySet) len()int { return len(s) } // 打印所有内容 func (s MySet) printAll(){ for k,v:=range s{ fmt.Println(k) fmt.Println(v) } } func main() { var a MySet=make(MySet) a.set("1") a.set("1") a.set("2") fmt.Println(a.len()) fmt.Println(a.isExist("1")) fmt.Println(a.isExist("5")) a.printAll() }