Golang - 异常处理
Golang - 异常处理
1. 抛异常和处理异常
package main
import "fmt"
//系统抛异常
func test0111() {
a := [5]int{0, 1, 2, 3, 4}
a[1] = 123
//a[10] =456
index := 10
//index out of range
a[index] = 456
}
//自己抛
func test222() {
getCircleArea(-5)
}
func getCircleArea(radius float32) (area float32) {
if radius < 0 {
//自己抛异常
panic("您的智商已下线,半径不能为负数")
}
return 3.14 * radius * radius
}
//结合defer
func test0333() {
//延迟执行匿名函数
//(1)函数正常执行结束了
//(2)报错中断执行
defer func() {
//recover():返回程序为什么挂了
if err := recover(); err != nil {
fmt.Println(err)
}
}()
getCircleArea(-5)
fmt.Println("这里有没有执行")
}
func test444() {
test0333()
fmt.Println("GAME OVER")
}
func main() {
//test0111()
//test222()
//test0333()
test444()
}
2. 返回异常
package main
import (
"errors"
"fmt"
)
func getCircleArea(radius float32) (ret float32, err error) {
if radius < 0 {
err = errors.New("沙雕,半径不能为负数")
return
}
ret = 3.14 * radius * radius
return
}
func main() {
ret, err := getCircleArea(-5)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("ret=", ret)
}
}
Golang - 异常处理的更多相关文章
- Golang异常处理-panic与recover
Golang异常处理-panic与recover 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在程序设计中,容错是相当重要的一部分工作,在 Go中它是通过错误处理来实现的,err ...
- golang异常处理
一.使用defer+recover 错误例子: [root@localhostgo_test]#cat t1.go package main func main(){ panic(1) } [root ...
- 【Gin-API系列】Gin中间件之异常处理(六)
本文我们介绍生产环境上如何通过捕捉异常recovery来完善程序设计和提高用户体验. Golang异常处理 golang 的异常处理比较简单,通常都是在程序遇到异常崩溃panic之后通过defer调用 ...
- Golang错误和异常处理的正确姿势
Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...
- 【GoLang】GoLang 错误处理 -- 异常处理思路示例
代码: package main import ( "fmt" // "testing" ) var Pkg = "packageName" ...
- Golang入门学习(五):异常处理
文章目录 2.5 错误处理机制 2.5.1 基本说明 2.5.2 入门示例 2.5.3 自定义错误 2.5 错误处理机制 2.5.1 基本说明 Go语言追求简洁优雅,因此并不支持传统的try-catc ...
- golang中自定义实现0当做除数的错误异常处理接口
package main import "fmt" type ZeroDivisor struct { // 定义一个0当做除数的结构体 divisor int // 被除数 di ...
- golang中的异常处理
1. defer是go提供的一种资源处理的方式.defer的用法遵循3个原则在defer表达式被运算的同时,defer函数的参数也会被运算.如下defer的表达式println运算的同时,其入参i也会 ...
- 【GoLang】转载:我为什么放弃Go语言,哈哈
我为什么放弃Go语言 作者:庄晓立(Liigo) 日期:2014年3月 原创链接:http://blog.csdn.NET/liigo/article/details/23699459 转载请注明出处 ...
随机推荐
- 四大传值详解:属性传值,单例传值,代理传值,block传值
一:属性传值 传值情景:从前一个页面向后一个页面传值 a.在后一个页面,根据传值类型和个数,写属性 b.在前一个页面, 为属性赋值 c.在后一个页面, 使用值 例如: 第一个视图: #import & ...
- ios 视频播放代码Demo
方法一: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. / ...
- Android 输入管理服务-输入事件到达之后的处理流程
接上一篇博客"Android 输入管理服务启动过程的流程".这两天分析了Android 输入管理服务接收到输入事件之后的处理流程,详细流程例如以下面两图所看到的: 接下图
- 编程算法 - 和为s的连续正整数序列 代码(C)
和为s的连续正整数序列 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正数s, 打印出全部和为s的连续正数序列(至少含有两个数). 起 ...
- GDI+学习之------色彩与图像
色彩 在GDI+中.色彩是通过Color类来描写叙述的.不是用RGB类.用RGB构造会出错.GDI+中的色彩信息值是由一个32位的数据来表示的,它包含8位alpha值和各8位的R.G.B值,对于alp ...
- ArcGis空间参考的设置
ArcGis10.0空间参考设置: 选择一个数据右击,进入属性properties 点击进入后则出现以下界面 双击进入后则出现以下界面 双击进入后出现如下界面,此时则可选择需要设置的空间参考 ArcG ...
- mysql数据库操作(3)
1.在查询结果中不显示重复记录 查询时不显示重复记录主要应用了 DISTINCT 关键字,该关键字用于删除重复记录. 在实现查询操作时,如果查询的选择列表中包含一个表的主键,那么每个查询中的记录都将是 ...
- E20170902-hm
devise v. 设计; 想出; 发明; 策划; n. 遗赠; 遗赠的财产; 遗赠的条款; device n. 设备
- php 原生简版日志导出
<?phpfunction writeLog($msg){ $logFile = date('Y-m-d').'.txt'; $msg = date('Y-m-d H:i:s').' >& ...
- sublime如何汉化
1.将sublime安装文件夹里面的defavlut.sublime-package这个文件zip解压. 2.然后查找到sublime-menu文件. 3.打开文件将json里面的caption里面的 ...