golang의 error 증강에 대해 얘기해 볼게요.
2933 단어 golang
순서
본고는 주로 golang의 error 강화를 연구하고자 한다
Errors in Go 1.13
golang의 1.13 버전은 error를 강화했습니다. 주로
%w
포장 오류입니다인스턴스
package main
import (
"errors"
"fmt"
"os"
)
var DemoErr = errors.New("test error stack")
// https://itnext.io/golang-error-handling-best-practice-a36f47b0b94c
func main() {
if err := methodA(false); err != nil {
fmt.Printf("%+v
", err)
}
if err := methodA(true); err != nil {
fmt.Printf("%+v
", err)
fmt.Printf("%+v
", errors.Unwrap(err))
fmt.Printf("%+v
", errors.Unwrap(errors.Unwrap(err)))
fmt.Println("errors.Is(err, DemoErr)=", errors.Is(err, DemoErr))
fmt.Println("errors.As(err, &DemoErr)=", errors.As(err, &DemoErr))
var pe *os.PathError
fmt.Println("errors.Is(err, pe)=", errors.Is(err, pe))
fmt.Println("errors.As(err, &pe)=", errors.As(err, &pe))
}
}
func methodA(wrap bool) error {
if err := methodB(wrap); err != nil {
if wrap {
return fmt.Errorf("methodA call methodB error: %w", err)
}
return err
}
return nil
}
func methodB(wrap bool) error {
if err := methodC(); err != nil {
if wrap {
return fmt.Errorf("methodB call methodC error: %w", err)
}
return err
}
return nil
}
func methodC() error {
return DemoErr
}
출력
test error stack
methodA call methodB error: methodB call methodC error: test error stack
methodB call methodC error: test error stack
test error stack
errors.Is(err, DemoErr)= true
errors.As(err, &DemoErr)= true
errors.Is(err, pe)= false
errors.As(err, &pe)= false
작은 매듭
errors.Is function behaves like a comparison to a sentinel error
errors.As function behaves like a type assertion
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에 따라 라이센스가 부여됩니다.