Go 1.13 errors 기본 사용 방법
본문 주요 전시
errors
가방에 추가된 방법의 사용법.핵심 사상: 올가미
무슨 뜻이죠?이 물건은 마치 인형처럼 위에서 아래로 헤집고 하나 더 가져가고 하나 더 가져가세요. 에이 하나 더 있어요. 원한다면 맨 밑에 없을 때까지 계속 헤집으세요.
기본용법
1. 포장된 error 만들기
방식1: fmt.Errorf
%w
파라미터를 사용하여 포장된 error를 되돌려줍니다.err1 := errors.New("new error")
err2 := fmt.Errorf("err2: [%w]", err1)
err3 := fmt.Errorf("err3: [%w]", err2)
fmt.Println(err3)
// output
err3: [err2: [new error]]
err2
는 합법적으로 포장된 error이다. 마찬가지로 err3
도 포장된 error이다. 이렇게 하면 계속 포장할 수 있다.
방식 2: 사용자 정의 struct
type WarpError struct {
msg string
err error
}
func (e *WarpError) Error() string {
return e.msg
}
func (e *WrapError) Unwrap() error {
return e.err
}
이전에 원본 코드를 본 학우들은 이미 알고 있을 것이다. 이것이 바로 fmt/errors.go
의warp에 관한 구조이다.간단하다Unwrap
방법을 실현한struct를 사용자 정의하면 됩니다.
2. 포장된 error를 뜯기
errors.Unwrap
err1 := errors.New("new error")
err2 := fmt.Errorf("err2: [%w]", err1)
err3 := fmt.Errorf("err3: [%w]", err2)
fmt.Println(errors.Unwrap(err3))
fmt.Println(errors.Unwrap(errors.Unwrap(err3)))
// output
err2: [new error]
new error
3. 포장된 error가 지정한 오류를 포함하는지 판단
errors.Is
다중 호출이 되돌아오는 오류가 한 번씩 포장되면, 우리가 호출 체인에서 얻은 오류가 밑바닥의 어떤 오류인지 어떻게 판단합니까? Unwrap err , err , true。
err1 := errors.New("new error")
err2 := fmt.Errorf("err2: [%w]", err1)
err3 := fmt.Errorf("err3: [%w]", err2)
fmt.Println(errors.Is(err3, err2))
fmt.Println(errors.Is(err3, err1))
// output
true
true
4. 지정된 유형의 오류 추출
errors.As
이것은 위errors.Is
와 대체적으로 같다. 차이점은 Is
는 엄격하게 상등, 즉 두 개error
가 상등한지 아닌지를 판단하는 것이다.As
는 유형이 같은지 판단하고 목표 유형에 부합되는 첫 번째 오류를 추출하여 특정한 오류를 통일적으로 처리한다.type ErrorString struct {
s string
}
func (e *ErrorString) Error() string {
return e.s
}
var targetErr *ErrorString
err := fmt.Errorf("new error:[%w]", &ErrorString{s:"target err"})
fmt.Println(errors.As(err, &targetErr))
// output
true
확장
Is As 두 가지 방법은 사용자 정의errorstruct에서 호출을 실현하고 덮어쓸 수 있는 구멍을 미리 남겨 두었습니다.
원본도 할 말이 없다. 너무 간단해서 한눈에 알아볼 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VisualStudio2017에서 .NET Core 콘솔 앱을 만들려고하면 처음부터 빌드 오류가 발생했습니다.
VisualStudio2017을 다운로드하고 처음으로 .NETCore에서 콘솔 앱을 만들려고했을 때 스켈레톤 빌드에서 오류가 발생하여 처음부터 포기했습니다.
.NETCore의 작법이 있을지도 모릅니다만, 우선 IDE...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
1. 포장된 error 만들기
방식1: fmt.Errorf
%w
파라미터를 사용하여 포장된 error를 되돌려줍니다.err1 := errors.New("new error")
err2 := fmt.Errorf("err2: [%w]", err1)
err3 := fmt.Errorf("err3: [%w]", err2)
fmt.Println(err3)
// output
err3: [err2: [new error]]
err2
는 합법적으로 포장된 error이다. 마찬가지로 err3
도 포장된 error이다. 이렇게 하면 계속 포장할 수 있다.방식 2: 사용자 정의 struct
type WarpError struct {
msg string
err error
}
func (e *WarpError) Error() string {
return e.msg
}
func (e *WrapError) Unwrap() error {
return e.err
}
이전에 원본 코드를 본 학우들은 이미 알고 있을 것이다. 이것이 바로
fmt/errors.go
의warp에 관한 구조이다.간단하다Unwrap
방법을 실현한struct를 사용자 정의하면 됩니다.2. 포장된 error를 뜯기
errors.Unwrap
err1 := errors.New("new error")
err2 := fmt.Errorf("err2: [%w]", err1)
err3 := fmt.Errorf("err3: [%w]", err2)
fmt.Println(errors.Unwrap(err3))
fmt.Println(errors.Unwrap(errors.Unwrap(err3)))
// output
err2: [new error]
new error
3. 포장된 error가 지정한 오류를 포함하는지 판단
errors.Is
다중 호출이 되돌아오는 오류가 한 번씩 포장되면, 우리가 호출 체인에서 얻은 오류가 밑바닥의 어떤 오류인지 어떻게 판단합니까?
Unwrap err , err , true。
err1 := errors.New("new error")
err2 := fmt.Errorf("err2: [%w]", err1)
err3 := fmt.Errorf("err3: [%w]", err2)
fmt.Println(errors.Is(err3, err2))
fmt.Println(errors.Is(err3, err1))
// output
true
true
4. 지정된 유형의 오류 추출
errors.As
이것은 위
errors.Is
와 대체적으로 같다. 차이점은 Is
는 엄격하게 상등, 즉 두 개error
가 상등한지 아닌지를 판단하는 것이다.As
는 유형이 같은지 판단하고 목표 유형에 부합되는 첫 번째 오류를 추출하여 특정한 오류를 통일적으로 처리한다.type ErrorString struct {
s string
}
func (e *ErrorString) Error() string {
return e.s
}
var targetErr *ErrorString
err := fmt.Errorf("new error:[%w]", &ErrorString{s:"target err"})
fmt.Println(errors.As(err, &targetErr))
// output
true
확장
Is As 두 가지 방법은 사용자 정의errorstruct에서 호출을 실현하고 덮어쓸 수 있는 구멍을 미리 남겨 두었습니다.
원본도 할 말이 없다. 너무 간단해서 한눈에 알아볼 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VisualStudio2017에서 .NET Core 콘솔 앱을 만들려고하면 처음부터 빌드 오류가 발생했습니다.
VisualStudio2017을 다운로드하고 처음으로 .NETCore에서 콘솔 앱을 만들려고했을 때 스켈레톤 빌드에서 오류가 발생하여 처음부터 포기했습니다.
.NETCore의 작법이 있을지도 모릅니다만, 우선 IDE...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VisualStudio2017에서 .NET Core 콘솔 앱을 만들려고하면 처음부터 빌드 오류가 발생했습니다.VisualStudio2017을 다운로드하고 처음으로 .NETCore에서 콘솔 앱을 만들려고했을 때 스켈레톤 빌드에서 오류가 발생하여 처음부터 포기했습니다. .NETCore의 작법이 있을지도 모릅니다만, 우선 IDE...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.