【Go 语言社区】在golang里实现类似try catch 的异常处理机制

此文介绍的并非 使用panic/recover. 因为实际使用中不建议使用panic/recover. 但try catch finally 的编程方式 还是会经常用到的。 代码如下:

package main

import (
"fmt"
"runtime"
"os"
)

// Try to open a file named dummy.one
// for input. Return the error if it won't open.
func dummy1() error {
f,err:= os.Open("dummy.one")
if(err!=nil) {
return err
} else {
f.Close()
return nil
}
}

// Try to open a file named dummy.two
// for input. Return the error if it won't open.
func dummy2() error {
f,err:= os.Open("dummy.two")
if(err!=nil) {
return err
} else {
f.Close()
return nil
}
}

// If the error value is not nil,
// display the caller's filename and
// calling line-number. Then, display
// the error object. Return true
// if the err parameter was true.
// Otherwise, return false.
func dispErr(err error) bool {
if(err!=nil) {
_,file,line,_:=runtime.Caller(1)
fmt.Fprintf(os.Stderr,"File: %s\nLine: %d\nErr: %v\n",file,line,err)
return true
}
return false
}

func main() {
var err error

// Create an anonymous function and
// invoke it.
//
// Use conditional returns to drop out
// of the function block to simulate falling
// out of a "try" block.
//
(func() {
fmt.Println("Attempt #1")
err=dummy1()
if dispErr(err) { return }

fmt.Println("Attempt #2")
err=dummy2()
if dispErr(err) { return }
})()

if(err!=nil) {
// catch block equivalent
fmt.Println("In 'catch' block")
}
// finally block equivalent
fmt.Println("Done!")
}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-02-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第四天 jQuery学习

jQuery是一个JavaScript框架。它兼容CSS3,还兼容各种浏览器。文档说明很全,应用详细,成熟插件多。

1584
来自专栏跟着阿笨一起玩NET

display:none与visible:hidden的区别

display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别:

831
来自专栏前端说吧

JS-DOM 综合练习-动态添加删除班级成绩表

3848
来自专栏技术墨客

React学习(2)——状态、事件与动态渲染 原

    上一篇文章最后说明了组件传入的参数必须是只读的,但是在丰富的前端应用中,页面样式是时时刻刻会发生变化的。在前面的章节中介绍了一个时钟的例子,通过重复调用...

2221
来自专栏拂晓风起

jQuery中this与$(this)的区别

1252
来自专栏魂祭心

原 js页面传值参数打包类

3435
来自专栏我和未来有约会

(收藏)JS验证

1 /* 2 函数名:检验表单的函数 3 作者:xuwen 日期:2007-2-10 4 参数 _obj:验证的对象 ...

25710
来自专栏超然的博客

HTML5 data-* 自定义属性

  在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-前缀加上自定义的属性名,使用这样的结构可以进行数据存放。使用dat...

1382
来自专栏从零开始学 Web 前端

从零开始学 Web 之 jQuery(八)each,多库共存,包装集,插件

each 方法用来遍历 jQuery 对象的,它的参数是一个事件处理函数,这个事件处理函数有两个参数,第一个参数是索引,第二个参数时索引对应的 DOM 对象,使...

1274
来自专栏大数据钻研

献给前端的小伙伴,祝大家面试顺利!

HTML相关问题 1.XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言 最主要的不同: XHTM...

3055

扫码关注云+社区

领取腾讯云代金券