教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang自定义一个简洁而强大的错误追踪包

golang自定义一个简洁而强大的错误追踪包

发布时间:2023-02-26   编辑:jiaochengji.com
教程集为您提供golang自定义一个简洁而强大的错误追踪包等资源,欢迎您收藏本站,我们将为您提供最新的golang自定义一个简洁而强大的错误追踪包资源

一. 前言

1.1 错误追踪需要了解的信息

  • 错误提示语
  • 错误的位置, 如:具体的文件名,错误行号和错误方法等.

1.2 实际情况

  • golang自带了错误信息包error
    只提供了简单的用法, 如errors.New(),和errors.Error()用来传递和获取错误信息.
  • 明显官方的包已经不能满足了, 只能采取其他方法补救, 如:

    • 扩充官方包
    • 自定义错误包
  • 目前已经有很多人造了这个轮子, 同时也各有特色, 有简单的, 也有复杂的.
  • 这里为了简单使用, 我便选择了扩充官方包, 做一个简单优雅的错误处理包.

1.3 实现目标

通过简单调用, 即可以查看我们需要的信息, 最好是一键调用搞定.
为了照顾使用习惯, 我们就采用跟官方一致的用法, 来完成.
该包已经完成, github地址为 https://github.com/gohouse/e

二. 实战

2.1 先看下简单用法

  • 生成一个错误
err := e.New("这里有错误")
跟官方的方法名保持一致, 只不过放在了自己的package e包下边
  • 查看错误信息
err.Error()
这个跟官方保持一致, 返回的也仅仅是string
  • 查看堆栈信息
err.Stack()

这里的stack是一个结构体, 包含了错误的文件名,行号和具体方法名

type ErrorStack struct {
    File     string
    Line     int
    FuncName string
}

因此, 我们要拿到对应的信息, 就只需要简单调用即可

// 获取堆栈对象
errorStack := err.Stack()

// 获取错误的文件
errorStack.File

// 获取错误的文件行号
errorStack.Line

// 获取错误的方法名
errorStack.FuncName

2.2 返回官方的标准error

err.ToError()

这里则把错误信息交还给官方标准error, 只包含标准的错误信息

如果想携带stack信息, 则可以使用

err.ToErrorWithStack()

返回格式为

error.New("标准错误信息; 错误文件:错误行号:错误方法名")

三. 完整示例

package main

import (
    "fmt"
    "github.com/gohouse/e"
)

func main() {
    var err e.E
    // 或者 var err e.Error
    err = testError()

    fmt.Println("错误信息:", err.Error())
    fmt.Println("错误堆栈信息:", err.Stack())
    fmt.Println("错误的文件名为:", err.Stack().File)
    fmt.Println("错误行号:", err.Stack().Line)
    fmt.Println("错误方法名:", err.Stack().FuncName)

    fmt.Printf("%#v", err)
}

func testError() e.Error {
    return e.New("only show a custom errors demo")
}

输出结果

错误信息: only show a custom errors demo
错误堆栈信息: {23 main.testError /go/src/github.com/gohouse/demo/e.go}
错误的文件名为: /go/src/github.com/gohouse/demo/e.go
错误行号: 23
错误方法名: main.testError

e.Error{Msg:"only show a custom errors demo", Stack:e.Stack{Line:23, FuncName:"main.main", File:"/go/src/github.com/demo/e.go"}}

四. 更多用法

请查看官方仓库, 地址为: https://github.com/gohouse/e
或者加入QQ群: 470809220
<img border="0" src="
http://pub.idqqimg.com/wpa/im...; alt="gorose-orm" title="gorose-orm">
交流学习

到此这篇关于“golang自定义一个简洁而强大的错误追踪包”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
ASP.NET的跟踪模式详解
python如何看执行过程
Golang错误和异常处理的正确姿势
golang 动态生成函数_GoLang的优点和缺点
golang错误处理机制(异常处理)
Go 语言到底适合干什么?
从零入门 Serverless | 函数计算的可观测性
兄弟连golang神技(1)-关于 Go 语言的介绍
从零入门Serverless|函数计算的可观测性
使用Go语言一段时间的感受

[关闭]
~ ~