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()
}
原文地址:https://www.cnblogs.com/Fzhiyuan/p/12045473.html