xerrors 异常
xerrors 包是一个非常棒的设计,不同于往常语言如java/php,因为go的errors只是一个string类型的映射,所以内存占用空间很少。这在golang的核心库和golang大多数开源模块中使用,简单,高效,稳定!比如:
var myErr:=errors.New("myrrh")
func act1()err{
return myErr
}
以上代非常高效,如果你经常做go的开发时。这种解决时经常会存在一个很头疼的问题,就是异常触发点很难定位,因为你很难去定位到异常发生的代码文件及行数和调用的堆栈,但出现问题时非常必要知道是什么情况处罚的这个异常,只是一个message不足以让开发人员去解决问题。
在最新的xerrors包中,引入了一个caller堆地址,通过使用Format接口可以格式化出调用第一行的堆,但这往往很多时候不足以解决去定位问题。这时可以考虑使用第三方包,请继续往下看:)
堆栈异常处理
require github.com/pkg/errors latest
go mod download
package main
import(
"fmt"
"github.com/pkg/errors"
)
func act1()error{
return errors.New("hello world!")
}
func main(){
fmt.Printf("%+v\n",act1())
}
Output:
Hello world!
main.act1
/tmp/aa/main.go:9
main.main
/tmp/aa/main.go:13
runtime.main
/usr/local/Cellar/go/1.13.4/libexec/src/runtime/proc.go:203
runtime.goexit
/usr/local/Cellar/go/1.13.4/libexec/src/runtime/asm_amd64.s:1357
以上代码中,首先引用pkg/errrors堆异常包,然后通过使用%+v格式化error,将堆栈数据打印到屏幕中,通过这种方式,通过调用堆栈你可以快速定位异常的代码位置,从而快速解决问题。
go原生日志框架
glog是Golang log的缩写,开源于golang核心库,所以应用比较广泛实现如下:
package main
import "log"
func main(){
log.Println(