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

变参
接受不定数量参数的函数称为变参函数,定义格式如下:
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 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值