Go语言学习笔记 -- 函数(2)
2017-03-12 21:41
603 查看
变参
接受不定数量参数的函数称为变参函数,定义格式如下:
func myFunc(args … int){ }
args…int 告诉Go这个函数接受不定数量的参数。注意,这些参数的类型全是int,在函数体内,args是一个int型的slice
如果不指定变参的类型,默认是空的接口interface{},假设有另一个变参函数myFunc2,下面的例子演示如何想起传递参数:
函数作为值
就像Go中的其他东西一样,函数也是值而已。它可以像下面这样赋值给变量:
回调
因为函数可以赋值给变量,所以可以作为参数传递到函数中,然后可以作为回调。比如有一个函数
这个函数的标识是 func printit(int)或者没有函数名的func(int),创建新的函数,使用这个函数作为回调,需要用到这个标识:
恐慌(Panic)和恢复(Recover)
Go没有像Java那样的异常机制,例如你无法向Java中那样抛出一个异常。作为替代,它使用了恐慌和恢复(Panic-and-Recover)机制。这应当作为最后的手段被指用,代码中应当避免,或者尽量少的出现恐慌代码。应当如何使用它:
panic
是一个内建函数可以中断原有的控制流程,进入一个令人恐慌的流程中。当函数F调用panic函数F的执行被中断,并且F中的延迟函数被执行,然后F返回到调用它的地方。在调用它的地方,F的行为就像调用了一个panic,这一过程继续向上,直到程序崩溃时的所有goroutine返回。
Recover
是一个内建函数。可以让令人恐慌的流程中的routine恢复过来。recover仅在延迟函数中有效,正常执行过程中,recover函数会返回nil并且没有其他任何效果。如果当前的goroutine陷入恐慌,调用recover可以获得panic的输入值,并且恢复正常执行。
下面这个函数检查作为其参数的函数执行时是否会产生panic:
接受不定数量参数的函数称为变参函数,定义格式如下:
func myFunc(args … int){ }
args…int 告诉Go这个函数接受不定数量的参数。注意,这些参数的类型全是int,在函数体内,args是一个int型的slice
func sumInt(args ...int) int { sum := 0 for _, n := range args { sum += n } return sum }
如果不指定变参的类型,默认是空的接口interface{},假设有另一个变参函数myFunc2,下面的例子演示如何想起传递参数:
func myFunc(args...int) { myFunc2(args...) <--原样传递 myFunc2(args[:3]...) <--传递部分 }
函数作为值
就像Go中的其他东西一样,函数也是值而已。它可以像下面这样赋值给变量:
func main() { a := func() { println("print something") } <-- 注意这里没有() a() <--调用函数 }
回调
因为函数可以赋值给变量,所以可以作为参数传递到函数中,然后可以作为回调。比如有一个函数
func printit(x int) { println(x) }
这个函数的标识是 func printit(int)或者没有函数名的func(int),创建新的函数,使用这个函数作为回调,需要用到这个标识:
func myFunc(y int, f func(int)) { f(y) }
恐慌(Panic)和恢复(Recover)
Go没有像Java那样的异常机制,例如你无法向Java中那样抛出一个异常。作为替代,它使用了恐慌和恢复(Panic-and-Recover)机制。这应当作为最后的手段被指用,代码中应当避免,或者尽量少的出现恐慌代码。应当如何使用它:
panic
是一个内建函数可以中断原有的控制流程,进入一个令人恐慌的流程中。当函数F调用panic函数F的执行被中断,并且F中的延迟函数被执行,然后F返回到调用它的地方。在调用它的地方,F的行为就像调用了一个panic,这一过程继续向上,直到程序崩溃时的所有goroutine返回。
Recover
是一个内建函数。可以让令人恐慌的流程中的routine恢复过来。recover仅在延迟函数中有效,正常执行过程中,recover函数会返回nil并且没有其他任何效果。如果当前的goroutine陷入恐慌,调用recover可以获得panic的输入值,并且恢复正常执行。
下面这个函数检查作为其参数的函数执行时是否会产生panic:
func throwPanic(f func()) (b bool) { def func(){ if x:= recover && x != nil { b = true } } f() return }
相关文章推荐
- Go语言学习笔记 -- 内建函数
- Go语言学习笔记七: 函数
- GO语言学习笔记3(函数接口并发)
- Go语言学习笔记(五) [函数]
- Go语言学习笔记(五) [函数]
- Go语言学习笔记之函数(function)
- Go语言学习笔记(五) [函数]
- Go语言学习笔记(三) [控制结构、内建函数]
- Go语言学习笔记---函数
- go语言学习笔记之冒泡排序的实现
- go语言学习笔记11
- javaScript语言精粹 学习笔记(4.3函数调用)
- Go语言学习笔记---通讯
- 《JavaScript 语言精粹》 学习笔记 —— 第四章 函数
- Go语言学习6:Go语言中的函数
- Go语言并发与并行学习笔记(一)
- Go语言学习笔记---接口
- Go语言学习笔记 - 环境搭建
- Go语言学习笔记---并发
- 《JavaScript 语言精粹》 学习笔记 —— 第四章 函数