https://play.golang.org/p/zoi0IS4PbIe
외부라이브러리 함수가 error를 리턴 했어
근데 이 error의 concrete type이 MyError 타입인지 &MyError 타입인지 몰라
나는 그게 value인지 pointer인지 관심이 없고 단지 "MyError로 간주할 수 있는가 아닌가?" 인데
위의 예제코드를 보면 errors.As는 value/pointer인지가 불일치하면 변환을 거부하고 있음...
내가 구현을 모르는 함수가 error를 리턴했는데 "이게 라이브러리에서 정의한 MyError인가?"
를 알고 싶으면 As를 pointer와 value 타입 둘 모두에 대해서 테스트 해봐야 하는거야?
아니면 MyError가 똑똑한 As를 구현했기를 믿는 수 밖에 없나?
하고자 하는게 뭔지 모르겠지만 자료형 체크는 필요할거 같은데영 ㅇㅂㅇ
강타입 언어라서 어쩔 수 없네요.. 윗댓님 말처럼 자료형 체크 미리 해두는 게 여러모로 편할거에요. 직접 As에 넣지 않아도 reflect 패키지 사용하면 value인지 pointer인지는 쉽게 알 수 있어요
아 이거 쫌 그르네... ㅠㅠ
어떤 함수가 뱉는 에러 타입들의 개수가 많을 수도 있는데 그걸 다 미리 체크해야 하는걸까? 어떤 에러는 재현하기 번거로워서 소스를 까뒤집어야 할 수도 있지 않을까... errors.As 구현이 value, pointer 무관하게 검사해주길 바라는건 디자인적 문제가 있나...
errors.As만 신경쓰면 되는거면, 에러를 인터페이스로 받은 다음에 일괄적으로 포인터나 밸류 타입으로 변환시키는 함수 만들어주는게 제일 쉽지 않을까 싶음 errors.As 함수 자체를 다른 타입도 알아서 받게 설정하는건 건드릴게 많아서 힘들것같네
https://play.golang.org/p/vEHBiO654ja
감사감사 사실 이게 실제로 발생한 문제가 아니라 매우 드물게 발생할 수 있는 상황을 전제하고 이걸 Go로 미려하게 해결할 수 있을까 하는 관점에서 나온거라 너무 내가 꽃밭에서 놀고 있는게 아닌가 싶어.