zoukankan      html  css  js  c++  java
  • 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()
    }
  • 相关阅读:
    【BZOJ3261】— 最大异或和(可持久化0/1Trie)
    【ZJOI2007】—捉迷藏(动态点分治)
    【HNOI2010】-城市建设(动态最小生成树)
    【BOI2007】Mokia 摩基亚
    【BZOJ 3262】-陌上花开(CDQ分治+树状数组)
    Win64 驱动内核编程-24.64位驱动里内嵌汇编
    Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook
    Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook
    Win64 驱动内核编程-22.SHADOW SSDT HOOK(宋孖健)
    Win64 驱动内核编程-22.SHADOW SSDT HOOK(宋孖健)
  • 原文地址:https://www.cnblogs.com/Fzhiyuan/p/12045473.html
Copyright © 2011-2022 走看看