Golang函數執行模板(log,耗時,panic)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。有些函數執行前後,需要加日誌、記錄耗時、還要處理panic,都是些重複性的東西。
 所以弄了個模板式的東西,碰到這類需求,直接把相關函數和參數,丟到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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.