go 语言之异常处理

↘锁芯ラ 提交于 2019-12-15 19:48:28

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()
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!