美文网首页
3 - 函数

3 - 函数

作者: 天命_风流 | 来源:发表于2020-07-02 13:19 被阅读0次
    • 函数可以返回多个返回值
    • 函数的值都是值传递
    package fn
    
    import (
        "math/rand"
        "testing"
    )
    
    func returnMultValues() (int, int){
        return rand.Intn(10), rand.Intn(20)
    }
    
    func TestFn(t *testing.T){
        a, b := returnMultValues()
        t.Log(a, b)
    }
    
    • 函数可以作为变量的值
    • 函数可以作为参数和返回值
    • 通过上面的这个性质,你可以构造一个类似 Python 中装饰器的东西
    func timeSpent(inner func(op int) int) func(op int) int{
        return func(n int) int {
            start := time.Now()
            ret := inner(n)
            fmt.Println("time spent:", time.Since(start).Seconds())
            return ret
        }
    }
    
    func slowFun(op int) int{
        time.Sleep(time.Second * 1)
        return op
    }
    
    func TestTimeSpent(t *testing.T){
        tsSlowFun := timeSpent(slowFun)
        t.Log(tsSlowFun(666))
    }
    
    • 函数的参数长度是可变的,使用 ...
    func Sum(ops ...int) int{
        fmt.Println(reflect.TypeOf(ops))  // []int
        sum := 0
        for _, op := range ops{
            sum += op
        }
        return sum
    }
    
    func TestVar(t *testing.T){
        t.Log(Sum(1,2,3))
        t.Log(Sum(1,2,3,4,5))
    }
    
    • 延迟函数:在函数执行结束之后执行的函数,相当于 finally
    • 延迟函数可以和 recover 进行错误恢复
    • 延迟函数可以做资源释放
    func Clear(){
        fmt.Println("Clear resources.")
    }
    
    func TestDefer(t *testing.T){
        defer Clear()
        fmt.Println("Start")
        panic("Error")
    }
    
    // Start -> Clear resources. -> panic: Error
    

    相关文章

      网友评论

          本文标题:3 - 函数

          本文链接:https://www.haomeiwen.com/subject/bbwlqktx.html