zoukankan      html  css  js  c++  java
  • golang 之 defer(统计函数执行时间)


    复制代码
     1 package main
     2 
     3 import (
     4     "fmt"
     5     "time"
     6 )
     7 
     8 func sum(a ...int) int {
     9     defer trace("sum")() // note:不要忘记defer语句后的圆括号,否则本该在进入时执行的操作会在退出时执行,而本该在退出时执行的,永远不会执行
    10     total := 0
    11     for _, val := range a {
    12         total += val
    13     }
    14     return total
    15 }
    16 
    17 func trace(msg string) func() {
    18     start := time.Now()
    19     fmt.Printf("enter %s
    ", msg)
    20     return func() {
    21         fmt.Printf("exit %s (%s)
    ", msg, time.Since(start))
    22     }
    23 }
    24 
    25 func main() {
    26     count := sum(3, 5, 9)
    27     fmt.Printf("%d
    ", count)
    28 }
    复制代码

    执行结果:

    1 enter sum
    2 exit sum (194.764µs)
    3 17

     利用defer修改函数的返回值:

    复制代码
     1 package main
     2 
     3 import (
     4     "fmt"
     5     "time"
     6 )
     7 
     8 func sum(a, b int) (result int) {
     9     //defer trace("sum")() // note:不要忘记defer语句后的圆括号,否则本该在进入时执行的操作会在退出时执行,而本该在退出时执行的,永远不会执行
    10     defer func() { result += a }() //被延时执行的匿名函数甚至可以修改函数返回给调用者的返回值
    11     result = 0
    12     result += a
    13     result += b
    14     return result
    15 }
    16 
    17 func trace(msg string) func() {
    18     start := time.Now()
    19     fmt.Printf("enter %s
    ", msg)
    20     return func() {
    21         fmt.Printf("exit %s (%s)
    ", msg, time.Since(start))
    22     }
    23 }
    24 
    25 func main() {
    26     count := sum(3, 8)
    27     fmt.Printf("%d
    ", count)
    28 }
    复制代码

    执行结果:

    1 [root@docker pro]# go run arg.go 
    2 [root@docker pro]# go run arg.go 
    3 14
     
     
  • 相关阅读:
    如何只用5分钟完成数据 列表、创建页面
    从零开始搭建一个PaaS平台
    C# 多线程猜想
    使用Golang + lua实现一个值班机器人
    如何使用Golang实现一个API网关
    记一次Windb死锁排查
    怎样在PaaS平台上搭建一个会自动关闭的会议室
    JS Object To C# ASP.Net ModelBind
    重写了一遍授权思路
    授权详细设计
  • 原文地址:https://www.cnblogs.com/williamjie/p/9227343.html
Copyright © 2011-2022 走看看