Pack github.com/pkg/errors
permite a los desarrolladores almacenar fácilmente error
informació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/errors
errores , 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 errors
paquete 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()
, %+v
se 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 %s
solo 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.go
30 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 GOTRACEBACK
tienen 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.