使用 defer 的最常见场景是在函数调用结束后完成一些收尾工作,例如在 defer 中回滚数据库的事务:
1 | func createPost(db *gorm.DB) error { |
在使用数据库事务时,我们可以使用上面的代码在创建事务后就立刻调用 Rollback 保证事务一定会回滚。哪怕事务真的执行成功了,那么调用 tx.Commit() 之后再执行 tx.Rollback() 也不会影响已经提交的事务。
defer 关键字会在函数返回之前运行。
参考资料:
1、创建 global 目录,里面存储全局变量:
1 | package global |
1 | package main |
执行go build编译运行,然后访问http://127.0.0.1:8080/metrics就可以看到采集到的指标数据。
这段代码仅仅通过http模块指定了一个路径/metrics,并将client_golang库中的promhttp.Handler()作为处理函数传递进去后,就可以获取指标数据了。这个最简单的 Exporter 内部其实是使用了一个默认的收集器NewGoCollector采集当前Go运行时的相关信息,比如go堆栈使用、goroutine数据等等。