分享
  1. 首页
  2. 文章

Golang函数执行模板(log,耗时,panic)

xcltapestry · · 2968 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

有些函数执行前后,需要加日志、记录耗时、还要处理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, 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


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:xcltapestry

查看原文:Golang函数执行模板(log,耗时,panic)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2968 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏