상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
스티브 워즈니악이 기술 교육의 접근성을 높이기 위해 어떤 노력을 했나요?
스티브 워즈니악이 기술 교육의 중요성을 강조하는 이유는 무엇인가요?
뉴올리언스에서의 추천 미술 전시회는 무엇인가요?
Elixir의 이점은 무엇인가요?
헬리코박터균 감염이 소화기계 암과의 연관성은 무엇인가요?
라데팡스의 유명한 음악 축제는 무엇인가요?
러스트에서 `if let` 문법은 어떻게 사용하나요?
러스트에서 `panic!`은 언제 발생하나요?
러스트에서 `Weak` 참조는 무엇인가요?
티눈이란 무엇인가요?
코스타리카에서의 스카이다이빙은 가능한가요?
아파트 분양 시 분양가 인상 요인은 무엇인가요?
Previous
Next
수정하기 - 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순위입니다.
수정하기
취소하기