golang의 error 포장에 대해서 얘기를 해볼게요.
2507 단어 golang
순서
본고는 주로 golang의 error 포장을 연구한다
error
type error interface {
Error() string
}
error 인터페이스에서 Error 방법을 정의하고string을 되돌려줍니다.
runtime.Error
package runtime
type Error interface {
error
// and perhaps other methods
}
패닉에 대해 발생하는 것은runtime이다.Error, 이 인터페이스에 error 인터페이스 내장
wrap
package main
import (
"errors"
"fmt"
pkgerr "github.com/pkg/errors"
)
func main() {
if err := methodA(false); err != nil {
fmt.Printf("%+v", err)
}
if err := methodA(true); err != nil {
fmt.Printf("%+v", err)
}
}
func methodA(wrap bool) error {
if err := methodB(wrap); err != nil {
if wrap {
return pkgerr.Wrap(err, "methodA call methodB error")
}
return err
}
return nil
}
func methodB(wrap bool) error {
if err := methodC(); err != nil {
if wrap {
return pkgerr.Wrap(err, "methodB call methodC error")
}
return err
}
return nil
}
func methodC() error {
return errors.New("test error stack")
}
내장된 errors를 사용하면 창고를 인쇄할 수 없습니다.pkg/errors를 사용하여 스택 휴대 가능
출력
test error stack
test error stack
methodB call methodC error
main.methodB
/error-demo/error_wrap.go:33
main.methodA
/error-demo/error_wrap.go:21
main.main
/error-demo/error_wrap.go:15
runtime.main
/usr/local/go/src/runtime/proc.go:204
runtime.goexit
/usr/local/go/src/runtime/asm_amd64.s:1374
methodA call methodB error
main.methodA
/error-demo/error_wrap.go:23
main.main
/error-demo/error_wrap.go:15
runtime.main
/usr/local/go/src/runtime/proc.go:204
runtime.goexit
/usr/local/go/src/runtime/asm_amd64.s:1374%
작은 매듭
doc
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set containerThere is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.