다양한 종류의 오류 처리와 리소스 관리를 구현해요.
프로그래밍에서 중요한 점 중 하나는 오류가 발생하더라도 오류를 처리하고 리소스를 닫는 방법이에요.
이 연습 문제에서는 다양한 오류를 처리해야 해요. 오류 처리는 프로그래밍 언어마다 차이가 크기 때문에, 정확히 무엇이 필요한지 확인하려면 해당 트랙의 테스트를 참고해야 해요.
Go의 오류나 패닉이 처음이라면, 맥락을 파악하기 위해 이 주제들에 관한 문서를 먼저 읽어 보는 것을 추천해요.
이 연습 문제에서는 리소스를 열고, 그 결과 리소스에 대해 Frob(input)을 호출한 다음, 어떤 경우에도 그 리소스를 닫는 함수 Use(opener ResourceOpener, input string) error를 정의해야 해요.
함수는 오류와 패닉을 제대로 처리해야 해요.
ResourceOpener opener는 리소스를 "열기" 위해 opener()처럼 직접 호출할 수 있는 함수예요.
이 함수는 관용적인 Go 방식으로 Resource와 오류 값을 반환해요.
Resource, ResourceOpener, FrobError, TransientError의 정의는 common.go 파일을 참고하세요.
해답은 common.go와 error_handling_test.go와 같은 패키지인 "erratum"에 작성하게 돼요.
그래야 해답에서 그 타입들을 사용할 수 있어요.
Use 함수에서 오류가 발생할 수 있는 곳은 몇 군데예요.
첫 번째 매개변수로 Use에 전달된 ResourceOpener 함수를 호출할 때, 이 함수가 TransientError 타입의 오류와 함께 실패할 수 있어요. 그렇다면 리소스를 열기 위해 계속 시도해야 해요.
다른 종류의 오류라면 Use 함수에서 그 오류를 반환해요.
ResourceOpener 함수가 반환한 Resource에 대해 Frob 함수를 호출할 때, FrobError(또는 다른 타입의 오류)와 함께 패닉이 발생할 수 있어요.
정말로 FrobError라면, 패닉을 일으킨 FrobError의 .defrobTag 변수를 Defrob 함수의 입력으로 사용해서 리소스의 Defrob 함수를 호출해야 해요.
어느 쪽이든 Use는 그 오류를 반환해야 해요.
또한 참고하세요: Resource가 성공적으로 열렸다면, 무슨 일이 있어도(오류가 발생했더라도) 그 Close 함수를 정확히 한 번 호출해야 해요.
특정 오류 타입인지 테스트하는 것은 타입 단언으로 할 수 있어요. 패닉 복구에서 오류 정보를 반환하는 유용한 방법으로 이름 있는 반환 값도 살펴보면 좋아요.
Exercism에 가입하고 Go 트랙을 개념 34개연습 문제 165개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.