随笔 - 62  文章 - 0  评论 - 1  阅读 - 19987

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()
}
posted on   OwlInTheOaktree  阅读(24)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示