상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Go에서 에러를 래핑(wrapping)하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Go 언어에서 에러를 래핑(wrapping)하는 것은 에러 처리의 중요한 부분입니다. 에러 래핑을 통해 원래 에러의 정보를 보존하면서 추가적인 컨텍스트를 제공할 수 있습니다. 이는 디버깅과 문제 해결에 매우 유용합니다. Go 1.13부터는 `errors` 패키지에 에러 래핑을 위한 새로운 기능이 추가되었습니다. 이 글에서는 Go에서 에러를 래핑하는 방법에 대해 자세히 설명하겠습니다. 1. 기본적인 에러 처리 Go에서 에러는 `error` 인터페이스를 통해 처리됩니다. 기본적으로 에러는 문자열을 반환하는 `Error()` 메서드를 가진 타입입니다. 에러를 반환할 때는 보통 다음과 같이 합니다: ```go package main import ( "errors" "fmt" ) func doSomething() error { return <a href='https://sangseek.com/sangseeks/errors.New/ko'>errors.New</a>("something went wrong") } func main() { err := doSomething() if err != nil { fmt.Println(err) } } ``` 2. 에러 래핑 에러 래핑은 기존 에러에 추가적인 정보를 덧붙여 새로운 에러를 생성하는 과정입니다. Go 1.13부터는 `<a href='https://sangseek.com/sangseeks/fmt.Errorf/ko'>fmt.Errorf</a>` 함수에 `%w` 포맷을 사용하여 에러를 래핑할 수 있습니다. ```go package main import ( "errors" "fmt" ) func doSomething() error { return errors.New("something went wrong") } func doAnotherThing() error { err := doSomething() if err != nil { return fmt.Errorf("doAnotherThing failed: %w", err) } return nil } func main() { err := doAnotherThing() if err != nil { fmt.Println(err) } } ``` 위의 예제에서 `doAnotherThing` 함수는 `doSomething`에서 발생한 에러를 래핑하여 더 많은 정보를 포함한 에러를 반환합니다. 3. 에러 언래핑 래핑된 에러에서 원래의 에러를 추출하려면 `errors.Unwrap` 함수를 사용할 수 있습니다. 이 함수는 래핑된 에러에서 원래 에러를 반환합니다. ```go package main import ( "errors" "fmt" ) func doSomething() error { return errors.New("something went wrong") } func doAnotherThing() error { err := doSomething() if err != nil { return fmt.Errorf("doAnotherThing failed: %w", err) } return nil } func main() { err := doAnotherThing() if err != nil { fmt.Println(err) // 원래 에러를 언래핑 if unwrappedErr := errors.Unwrap(err); unwrappedErr != nil { fmt.Println("Unwrapped error:", unwrappedErr) } } } ``` 4. 에러 비교 Go에서는 `errors.Is` 함수를 사용하여 특정 에러가 래핑된 에러의 체인에 있는지 확인할 수 있습니다. 이 기능은 에러가 특정한 타입인지 확인할 때 유용합니다. ```go package main import ( "errors" "fmt" ) var ErrSpecific = errors.New("specific error") func doSomething() error { return ErrSpecific } func doAnotherThing() error { err := doSomething() if err != nil { return fmt.Errorf("doAnotherThing failed: %w", err) } return nil } func main() { err := doAnotherThing() if err != nil { fmt.Println(err) // 특정 에러인지 확인 if errors.Is(err, ErrSpecific) { fmt.Println("The error is a specific error.") } } } ``` 5. 에러 타입 정의 자신만의 에러 타입을 정의하고 이를 래핑하는 것도 가능합니다. 이를 통해 더 많은 정보를 포함할 수 있습니다. ```go package main import ( "fmt" ) type MyError struct { Msg string } func (e *MyError) Error() string { return e.Msg } func doSomething() error { return &MyError{"something went wrong"} } func doAnotherThing() error { err := doSomething() if err != nil { return fmt.Errorf("doAnotherThing failed: %w", err) } return nil } func main() { err := doAnotherThing() if err != nil { fmt.Println(err) } } ``` 결론 Go에서 에러를 래핑하는 것은 에러 처리의 중요한 부분으로, 원래 에러의 정보를 보존하면서 추가적인 컨텍스트를 제공할 수 있습니다. Go 1.13부터 제공되는 `fmt.Errorf`의 `%w` 포맷, `errors.Unwrap`, `errors.Is` 등의 기능을 활용하여 효과적으로 에러를 관리할 수 있습니다. 이러한 방법들을 통해 Go 애플리케이션의 에러 처리 로직을 더욱 <a href='https://sangseek.com/sangseeks/견고/ko'>견고</a>하고 이해하기 쉽게 만들 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기