Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Golang函数执行模板(log,耗时,panic)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有些函数执行前后,需要加日志、记录耗时、还要处理panic,都是些重复性的东西。
所以弄了个模板式的东西,碰到这类需求,直接把相关函数和参数,丢到run函数去就不用管了,省得浪费时间。

先上个调用例子:

//函数执行模板
//author: Xiong Chuan Liang
//date: 2015-3-19

package main

import (
	"fmt"
	"log"
	"os"

	"utils"
)

func main() {
	log.SetOutput(os.Stdout)

	w := utils.NewWorker()
	w.Run("myPrintf()",myPrintf,"aa","bb")

}

func myPrintf(args ...interface{}) (int,error) {
	fmt.Println("myPrintf() begin.")
	for _,arg := range args {
		fmt.Println("args:",arg)
	}
	fmt.Println("myPrintf() end.")
	panic("尝试抛出panic错误")
	return 0,nil
}

/*
运行结果:

2015/03/19 13:49:30 [worker.Run()] 函数: myPrintf()
myPrintf() begin.
args: aa
args: bb
myPrintf() end.
2015/03/19 13:49:30 [worker.Run()] panic:
 myPrintf()
 尝试抛出panic错误
2015/03/19 13:49:30 [worker.Run()] 函数:myPrintf() 耗时:0.004000 秒

*/
调用还是很方便的,传入函数和附带的参数即可.

实现也很简单:

//函数执行模板
//author: Xiong Chuan Liang
//date: 2015-3-19

package utils

import (
	"fmt"
	"log"
	"time"
)

type workerFunc func(...interface{}) (int,error)

type worker struct {
}

func NewWorker() *worker {
	return &worker{}
}

func (w *worker) Run(name String,workerFunc workerFunc,args ...interface{}) (int,error) {

	Now := time.Now()
	log.Println("[worker.Run()] 函数:",Name)

	defer func() {
		if r := recover(); r != nil {
			log.Println("[worker.Run()] panic:\n",name,"\n",fmt.Sprint(r))
			w.elasped(name,Now,time.Now())
		}
	}()

	ret,err := workerFunc(args...)
	w.elasped(name,time.Now())
	return ret,err
}

func (w *worker) elasped(name String,beginTime,endTime time.TimE) {
	log.Printf("[worker.Run()] 函数:%s 耗时:%f 秒 \n",endTime.Sub(beginTimE).Seconds())
}

没多少东西,我也就处理func(...interface{}) (int,error)这类函数,其它没管了。


BLOG: http://blog.csdn.net/xcl168

@H_851_3@mAIL: xcl_168@aliyun.com

大佬总结

以上是大佬教程为你收集整理的Golang函数执行模板(log,耗时,panic)全部内容,希望文章能够帮你解决Golang函数执行模板(log,耗时,panic)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。