• Go语言基础06 _function


    Go语言基础06 _function

    函数在Go语言中是一等公民

    与其他主要编程语言的差别

    • 可以有多个返回值
    • 所有参数都是值传递:slice,map,channel 会有传引用的 错觉
    • 函数可以作为变量的值
    • 函数可以作为参数和返回值

    defer 函数时 Go语言中类似于 java的 final一样的存在

    package _func
    
    import (
       "fmt"
       "math/rand"
       "testing"
       "time"
    )
    
    func returnMultiValues() (int, int) {
       return rand.Intn(10), rand.Intn(20)
    }
    
    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()) // 计算 从 start 到这里 花了多少时间
          return ret
       }
    }
    
    func slowFun(op int) int {
       time.Sleep(time.Second * 1)
       return op
    }
    
    func TestFn(t *testing.T){
       a,_ := returnMultiValues()
       t.Log(a)
       tsSF := timeSpent(slowFun)
       t.Log(tsSF(10))
    }
    
    func Sum(ops ...int) int{// 使用 可变参数 的求和函数  
       ret := 0
       for _,op :=range ops {
          ret += op
       }
       return ret
    }
    
    func TestVarParam(t *testing.T){
       t.Log(Sum(1,2,3,4))
       t.Log(Sum(1,2,3,4,5,6))
    }
    
    func Clear(){
       fmt.Println("Clear resources.")
    }
    
    func TestDefer(t *testing.T){
       defer Clear()
       fmt.Println("Start")
       panic("err") // defer声明的 函数 会在最后执行 无论是否出错
       //defer Clear()
    }
    
  • 相关阅读:
    每日一题力扣23 链表排序 转数组 再放入
    每日一题力扣24
    每日一题力扣206
    每日一题力扣21 神奇的递归
    每日一题力扣430
    每日一题力扣19
    每日一题力扣445 链表转数组相加两数求和
    每日一题力扣2
    【20211102】有价值的东西,需要时间
    【20211103】连岳摘抄
  • 原文地址:https://www.cnblogs.com/OwlInTheOaktree/p/15263286.html
Copyright © 2020-2023  润新知