当前位置: 首页 > news >正文

Go语言——error、panic

一、error基本使用

package mainimport ("errors""fmt"
)// 自定义Error
type NetError struct {errorIsLink bool // 是否网络连接错误IsAddr bool // 是否地址错误
}
type MyError struct {code intmsg  string
}func (e MyError) Error() string {return e.msg
}func (e MyError) IsLink() bool {return true
}func (e MyError) IsAddr() bool {return true
}var ErrNotFound = errors.New("not found")func main() {data, err := Find(1)data1, err1 := Find(2)if err != nil && !errors.Is(err, ErrNotFound) {return}if data == 0 {// set}if e, ok := err1.(*MyError); ok && e.IsLink() && e.IsAddr() {// 重试fmt.Println(err1.(*MyError).msg, data1)}fmt.Println("程序结束")
}func do() error {return errors.New("test err")
}func Find(id int) (int, error) {if id == 1 {return 0, ErrNotFound}if id == 2 {return 2, &MyError{code: -20001,msg:  "id不能为2",}}return id, nil
}

二、panic使用

package mainimport ("fmt""runtime""time"
)func main() {go func() {defer func() {if err := recover(); err != nil {fmt.Println("err = ", err)const size = 64 << 10buf := make([]byte, size)buf = buf[:runtime.Stack(buf, false)]fmt.Printf("Stack trace:\n%s\n", buf)}}()var names []stringfmt.Println(names[0])}()time.Sleep(time.Second * 10)
}

相关文章:

  • 【Redis】C++如何使用redis
  • Nginx 性能调优与深度监控
  • Linux上将conda环境VLLM服务注册为开机自启
  • “430”“531”光伏政策变革下,安科瑞如何 “保驾护航”?
  • 热部署相关
  • Office365功能特点
  • 7. HTML 表格基础
  • MATLAB技巧——命令行输入的绘图,中文是正常的,到了脚本(m文件)里面就变成乱码的解决方法
  • default和delete final和override
  • 【fastadmin开发实战】财务数据快速导入系统(复制导入)
  • 力扣92.反转指定范围内的链表、25.k个一组反转链表
  • 学习黑客Linux 系统状态管理
  • 不同OS版本中的同一yum源yum list差异排查思路
  • Android Studio根目录下创建多个可运行的模块
  • PDF文档压缩攻略
  • 【PhysUnits】2 Scalar<T> 标量元组结构体(scalar/mod.rs)
  • ABC 403
  • MySQL的基本操作
  • vue3+ts的watch全解!
  • 案例分享 | 攻克ADAS开发测试难题,实现单元动态测试新突破
  • 竞彩湃|德甲欧冠资格竞争白热化,伯恩茅斯主场迎恶战
  • 价格周报|供需回归僵局,本周生猪均价与上周基本持平
  • 警方通报男子地铁上拍视频致乘客恐慌受伤:列车运行一度延误,已行拘
  • 2025年度上海市住房城乡建设管理委工程系列中级职称评审工作启动
  • 上汽享道出行完成13亿元C轮融资,已启动港股IPO计划
  • 深圳两家会所涉卖淫嫖娼各被罚7万元逾期未缴,警方发催告书