golang异常处理
一、使用defer+recover
错误例子:
[root@localhostgo_test]#cat t1.go
package main func main(){
panic(1)
}
[root@localhostgo_test]#go run t1.go
panic: 1 goroutine 1 [running]:
main.main()
/root/go_test/t1.go:4 +0x39
exit status 2
异常处理例子:
[root@localhostgo_test]#cat error.go
package main
import "fmt" func test(){ defer func(){ //必须要先声明defer,否则不能捕获到panic异常
err := recover()
if err != nil {
fmt.Println("error!",err) // 这里的err其实就是panic传入的内容,1
}
fmt.Println("123")
}()
err()
} func err(){
fmt.Println("start...")
panic(1) } func main(){
test()
fmt.Println("end...") }
[root@localhostgo_test]#go run error.go
start...
error! 1
123
end...
二、使用panic(不推荐使用)
panic 内置函数 ,接收一个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error 类
型的变量,输出错误信息,并退出程序
例子:
package main
import (
"fmt"
"time"
) func main() {
defer func() { //必须要先声明defer,否则不能捕获到panic异常
fmt.Println("2")
if err := recover(); err != nil {
fmt.Println(err) //这里的err其实就是panic传入的内容,bug
}
fmt.Println("3")
}()
f()
} func f() {
for {
fmt.Println("1")
panic("bug") //panic遇到错误直接就退出了
fmt.Println("4") //不会运行的
time.Sleep(1 * time.Second)
}
} ###结果##
1
2
bug
3
三、输出错误
使用errors.Now进行错误输出
例子:
package main
import (
"fmt"
"errors"
) func main(){
err := errors.New("error:未找到命令")
if err != nil {
fmt.Println(err)
}
fmt.Println("111")
} ###结果##
error:未找到命令
111
golang异常处理的更多相关文章
- Golang异常处理-panic与recover
Golang异常处理-panic与recover 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在程序设计中,容错是相当重要的一部分工作,在 Go中它是通过错误处理来实现的,err ...
- Golang - 异常处理
目录 Golang - 异常处理 1. 抛异常和处理异常 2. 返回异常 Golang - 异常处理 1. 抛异常和处理异常 package main import "fmt" / ...
- 【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 转载请注明出处 ...
随机推荐
- springboot~yml里的自定义配置
主要介绍三种,字符串配置,数组配置和带默认值的配置 字符串配置 //yml setString: hello /** * 字符串. */ @Value("${setString}" ...
- Python编程从入门到实践笔记——异常和存储数据
Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...
- vue-resource实现数据的绑定、添加、删除
vue-resource实现数据的绑定.添加.删除 <!DOCTYPE html> <html lang="en"> <head> <ti ...
- DS控件库 DS标签的另类用法之折叠展开
某些场合下,可以通过动态设置DS标签的文本内容来输出不同的显示效果,以下是示例. 示例中的素材 示例资源文本 String1="<linkimg=E1><b>&l ...
- 百度官方CDN公共库(jquery、dojo、Bootstrap)
CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速. 百度公共CDN为您的应用程序提供稳定.可靠.高速的服务,包含全 ...
- footer固定在页面底部的实现方法总结
方法一:footer高度固定+绝对定位 HTML代码: <body> <header>头部</header> <main>中间内容</main&g ...
- Snapde电子表格支持的文件格式
Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏.那么它支持哪些文件格式呢? 1.CSV文件格式,是一种以逗号分隔列.以回车分隔行的文本文 ...
- Android为TV端助力 外挂字幕(设置颜色,大小,位置,微调字幕)
前提摘要: 可以给电影加字幕,目前支持srt和ass格式, 功能摘要: 支持微调字幕,设置大小,颜色,位置 1 .字幕解析类 package com.hhzt.iptv.lvb_x.utils; ...
- Android 使用TextView实现跑马灯效果
前言 我们在开发中经常会遇到一个小问题.比如下面一个小例子: 这个文字太长,单行中导致无法全部显示出来,这就是今天要实现的功能. 当然,百度中也有很多这种解决方案. 其中有一种,例如: <Tex ...
- Glide的 java.lang.RuntimeException: Expected instanceof GlideModule, but found:X.GlideModule@2e4554f
问题一 在添加过混淆规则后,App打包的时候,发现报错了 java.lang.RuntimeException: Expected instanceof GlideModule, but found: ...