Ir a notas de estudio (72) - Ir a errores de bibliotecas de terceros con manejo de errores de pila

Pack github.com/pkg/errorspermite a los desarrolladores almacenar fácilmente errorinformación sobre los mensajes de error, errores de posicionamiento más rápidos y precisos, como el número de línea y otra información.

Si el código del artículo es más complejo y, a menudo, necesita realizar un seguimiento de github.com/pkg/errorserrores , recomiende el uso de este paquete de manejo de errores.

instalación

go get -v github.com/pkg/errors

El paquete de la biblioteca estándar y el errorspaquete tienen el mismo nombre, y tiene New()una función, el manejo de errores de la biblioteca estándar en una pila con manejo de errores es bastante fácil. El siguiente código utiliza el errors.Wrap()paquete de información de error de función:

package main

import (
    "fmt"

    "github.com/pkg/errors"
)

var ErrNameEmpty = errors.New("Name can't be empty!")

func (s *Student) SetName(newName string) (err error) {
    
    
    if newName == "" || s.Name == "" {
    
    
        return ErrNameEmpty
    } else {
    
    
        s.Name = newName
        return nil
    }
}

type Student struct {
    
    
    Name string
    Age  int
}

func NewStu() (err error) {
    
    
    stu := &Student{
    
    Age: 19}
    e := stu.SetName("")

    if e != nil {
    
    
        return errors.Wrap(e, "set name failed!")
    } else {
    
    
        return nil
    }

}

func main() {
    
    
    e := NewStu()
    fmt.Printf("%+v\n", e)
}

Finalmente Printf(), %+vse muestra el mensaje de error de configuración del marcador de posición y la información de la pila, como el nombre de archivo de la función en ejecución, líneas, etc., mientras que el marcador de posición %ssolo muestra mensajes de error.

El siguiente mensaje de error con una pila de información hace que sea fácil para los programadores localizar una posición problemática, por ejemplo main.go:30, mostrarla en las main.go30 líneas del archivo.

Name can't be empty!
main.init
    main.go:9
runtime.main
    /src/runtime/proc.go:189
runtime.goexit
    /src/runtime/asm_amd64.s:1333
set name failed!
main.NewStu
    main.go:30
main.main
    main.go:38
runtime.main
    /src/runtime/proc.go:201
runtime.goexit
    /src/runtime/asm_amd64.s:1333
  • Wrap() La función agrega información de pila y nueva información de solicitud al mismo tiempo sobre la base de errores existentes,
  • WithMessage() La función agrega nueva información sobre la base de errores existentes,
  • WithStack()La función agrega información de pila sobre la base de errores existentes. En la práctica, puede optar por utilizarlo según la situación.

Este paquete es relativamente simple y práctico, y puede estar incluido en la biblioteca estándar, por lo que se recomienda usarlo en la producción real.
Otras variables ambientales GOTRACEBACKtienen un mayor impacto en la información de salida de la información de la pila, los diferentes valores son información de salida con diferentes niveles de detalle.

  • GOTRACEBACK = ninguno
  • GOTRACEBACK = single (valor predeterminado)
  • GOTRACEBACK = todo
  • GOTRACEBACK = sistema
  • GOTRACEBACK = accidente

En la debug.SetTraceback (level string)función del programa se puede proporcionar la variable.

Supongo que te gusta

Origin blog.csdn.net/wohu1104/article/details/113795455
Recomendado
Clasificación