初识Go(4)

huangxiaohen · · 1268 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

defer
Go 语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个 defer 语句。
当函数执行到最后时,这些 defer 语句会按照逆序执行,最后该函数返回。特别是当你在进
行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不
然很容易造成资源泄露等问题。

func ReadWrite() bool {
	file.Open("file")
	defer file.Close()
	if failureX {
		return false
	}
	if failureY {
		return false
	}
	return true
}

函数作为值,类型
在 Go 中函数也是一种变量,我们可以通过 type 来定义它,它的类型就是所有拥有相同的
参数,相同的返回值的一种类型
type typeName func(input1 inputType1 [, input2 inputType2 [, ...]) (result1 resultType1 
[, ...])

type testInt func(int) bool // 声明了一个函数类型
func isOdd(integer int) bool {
if integer%2 == 0 {
	return false
}
	return true
}

func filter(slice []int, f testInt) []int {
var result []int
for _, value := range slice {
	if f(value) {
		result = append(result, value)
				}
}
	return result
}

odd := filter(slice, isOdd)  //传入函数参数

Panic 和 Recover
Go 没有像 Java 那样的异常机制,它不能抛出异常,而是使用了panic和recover机制	
你的代码中应当没有,或者很少有 panic 的东西.
Panic:
是一个内建函数,可以中断原有的控制流程,进入一个令人恐慌的流程中。当函数 F 调用
panic,函数 F 的执行被中断,但是 F 中的延迟函数会正常执行,然后 F 返回到调用它的地
方。在调用的地方,F 的行为就像调用了 panic。这一过程继续向上,直到发生 panic 的
goroutine 中所有调用的函数返回,此时程序退出。 恐慌可以直接调用 panic 产生。也可以由
运行时错误产生,例如访问越界的数组。
Recover:
是一个内建的函数,可以让进入令人恐慌的流程中的 goroutine 恢复过来。 recover 仅在延迟
函数(defer)中有效。在正常的执行过程中,调用 recover 会返回 nil,并且没有其它任何效果。如果
当前的 goroutine 陷入恐慌,调用 recover 可以捕获到 panic 的输入值,并且恢复正常的执
行。

  


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:huangxiaohen

查看原文:初识Go(4)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1268 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传