• go 语言之异常处理


    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()
    }
  • 相关阅读:
    java中整形变量与字节数组的转换
    Oracle中的dual表的用途
    Linux环境变量的配置
    WebService 之Axis2(三)
    WebService 之Axis2(二)
    Axis2: wsdl2java 参数注解
    axis2学习——axis2的安装
    axis2学习——axis2消息处理机制
    axis2学习——客户端的开发
    axis2学习——开发自定义的axis2服务
  • 原文地址:https://www.cnblogs.com/Fzhiyuan/p/12045473.html
Copyright © 2020-2023  润新知