您的位置:首页 > 编程语言 > Go语言

Go语言学习笔记 -- 函数(2)

2017-03-12 21:41 603 查看
变参

接受不定数量参数的函数称为变参函数,定义格式如下:

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