Golang函数执行模板(log,耗时,panic)
来源:互联网 发布:mac如何强制删除文件 编辑:程序博客网 时间:2024/06/05 16:45
有些函数执行前后,需要加日志、记录耗时、还要处理panic,都是些重复性的东西。
所以弄了个模板式的东西,碰到这类需求,直接把相关函数和参数,丢到run函数去就不用管了,省得浪费时间。
所以弄了个模板式的东西,碰到这类需求,直接把相关函数和参数,丢到run函数去就不用管了,省得浪费时间。
先上个调用例子:
//函数执行模板//author: Xiong Chuan Liang//date: 2015-3-19package mainimport ("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: aaargs: bbmyPrintf() 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-19package utilsimport ("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, now, time.Now())return ret, err}func (w *worker) elasped(name string, beginTime, endTime time.Time) {log.Printf("[worker.Run()] 函数:%s 耗时:%f 秒 \n",name, endTime.Sub(beginTime).Seconds())}
没多少东西,我也就处理func(...interface{}) (int, error)这类函数,其它没管了。
BLOG: http://blog.csdn.net/xcl168
MAIL: xcl_168@aliyun.com
0 0
- Golang函数执行模板(log,耗时,panic)
- golang 检查函数是否会产生panic
- golang捕获panic
- golang panic的使用
- Golang模板函数使用范例
- panic Log分析
- golang中的defer panic recover
- golang中的defer panic使用方法
- GOLANG的PANIC和RECOVER
- Golang---Defer, Panic, and Recover
- Golang中的defer, panic, recover
- Golang中的panic和recover
- 程序执行耗时测试
- 计算执行sql耗时
- [PHP]页面执行耗时
- informix SQL 执行耗时
- Volley执行耗时操作
- The only autocompletion I get is PANIC ;golang vim gocode 自动完成得到PANIC PANIC PANIC
- StringUtils的isBlank与isEmply
- 【转载】struts.custom.i18n.resources
- test
- iOS 设置button圆角
- Q&A: Putting MySQL Fabric to use
- Golang函数执行模板(log,耗时,panic)
- yum提示another app is currently holding the yum lock;waiting for it to exit
- 深入理解HTTP协议及原理分析之 深入了解篇7
- 黑马程序员————OC中类的深入研究和SEL基本用法总结
- USB枚举过程
- 百度知道等级
- Fabric FAQ
- 文字 流体模拟
- 公司上市后员工真能暴富?当心期权的陷阱